• 締切済み

PHP Soapで利用できるサービスの数

PHPのsoap関数を利用してwebサービスを開発しています。 server側に複数のサービス関数を登録してclient側から呼び出していますが、clientから呼び出すサービス(関数)の数が4以下で正常に作動しますが、4を越えるサービスは呼び出されず正常に作動しません。 4個以上のサービスを呼び出す方法についてよろしくご教示お願いします。 当方の使用環境は以下の通りです。 ----------------------------------------------- Microsoft Windows XP 2002 Home Edition Version 2002 Service Pack 3 Apache 1.3.31(Win32) PHP Version 5.2.5 Build Date Nov 8 2007 23:18:08 php_soap.dll Version 5.2.5 のlocalhostで使用。 [php.ini]設定 [soap] ; Enables or disables WSDL caching feature. soap.wsdl_cache_enabled=1 ; Sets the directory name where SOAP extension will put cache files. soap.wsdl_cache_dir="/tmp" ; (time to live) Sets the number of second while cached file will be used ; instead of original one. soap.wsdl_cache_ttl=86400 -----------------------------------------------

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

これだけでは、わかりません wdslの記述方法が間違っているのではないでしょうか? 業務で使用していますが、4個制限なんてありません

kahata
質問者

補足

レスありがとうございます。 当方以下のような非wsdlモードで試験しました。 1番目~4番目を一つコメントアウトすると5番目が正常に出力されます。 phpinfo()見ると、 soap.wsdl_cache_limit 5 なっていますが、何か関係があるのでしょうか? (soap.wsdl_cache_limitを10にしても改善されませんでしたが......) よろしくお願いします。 SoapClient_test.php --------------------------------------------------------------- <?php $location = 'http://localhost/to-localtion-path/SoapServer_test.php'; $uri = 'http://localhost/to-uri-path/'; try { $client = new SoapClient(null,array('location'=> $location,'uri' => $uri)); $result = $client->add(3, 5); echo $result; // 1番目OK $result = $client->addByArray(array(1, 3, 5, 9)); echo $result; // 2番目OK $result = $client->hello("namae"); echo $result; // 3番目OK $result = $client->hello(mb_convert_encoding("名前", 'utf-8','auto')); echo $result; // 4番目OK // 以下5番目のserviceが出力されない $user = new stdClass(); $user->name = mb_convert_encoding("はろーわーるど", 'utf-8','auto'); $user->url = "http://localhost/to-link-path"; $result = $client->helloByObj($user); echo $result; // 5番目のserviceが出力されない } catch (Exception $e) { var_dump($e); exit; } ?> ---------------------------------------------------------------- SoapServer_test.php ---------------------------------------------------------------- <?php mb_internal_encoding('utf-8'); mb_http_output('utf-8'); function add($x, $y) {return (int)$x + (int)$y;} function addByArray($vars) {return array_sum($vars);} function hello($nm) {return 'こんにちは、' . $nm . ' さん!';} function helloByObj($obj) { return 'こんにちは、<a href="' . $obj->url . '">' . $obj->name . '</a> さん!'; } $server = new SoapServer(null, array('uri' => 'http://localhost/to-uri-path/')); $server->addFunction('add'); $server->addFunction('addByArray'); $server->addFunction('hello'); $server->addFunction('helloByObj'); $server->handle(); ?> ----------------------------------------------------------------

関連するQ&A

  • PHP4でのSOAP実装方法について

    初めて質問いたします。新米PGです。 PHP4で、SOAPとWSDLを利用したWEBサービスを開発したいと考えております。 しかし、SOAP,WSDLの利用は初めてで、PHPもごく簡単なプログラムしか組んだことがないため、SOAPクライアントやサーバの実際の挙動、WSDLとのかかわりなどがいまいちよくわかりません。 SOAPやWSDLについて、どういった役割を果たすものなのかというのは、概念としては理解しているつもりです。 実際にプログラムを動かしながら確認したい。 何か、初心者にも理解できるようなサンプルプログラムをご存知の方いらっしゃいますでしょうか。これまで1月以上探してきましたが、どれも難解であったり、エラーになってしまったりとよく判りませんでした。 なんだか情けない質問でお恥ずかしいですが、このままでは前に進めそうにないので、助けていただけたらと思います。 サンプルプログラムと、自分の環境に合わせて変更すべき箇所なども教えていただけたらと思います。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでwebサービスの作り方(wsdl)

    PHPとFlash(actionscript)を連携させたいと思っています。 PHPが提供側、Flashが使用側になります。 FlashではWSDLを解析して、webサービスを使用できるように作っています。 PHPにPEAR:SOAPを組み込んで実装しようと試みたのですが、 WSDLで公開する実装の仕方が分かりません。 正直、あんまり、SOAP、WSDLの知識がいまいちなので、 うまく説明できてないかもしれませんが、 アドバイスよろしくお願いします。

    • 締切済み
    • PHP
  • SOAP::Lite axis 例外処理

    お世話になります。 perlクライアントから、SOAP::Liteモジュールを使い、 axisに登録されたjavaサーブレットクラスを呼び出しています。 (例) $s = SOAP::Lite->service( 'http://xxx.wsdl' ); #サービス名 $s->test(); #javaサーブレットクラス呼び出し javaサーブレットクラスが例外(Exception)で終了した場合、 perlクライアントで例外をキャッチする方法はありますでしょうか? #以下のコードではエラーはキャッチできませんでした。 eval { $s->test(); }; if ($@) { # エラー処理 }; * 通常処理はうまくうごいています。 例外は意図的にExceptionをthrowしています。java内ではキャッチして終了してます。

  • PHP3からPHP5にVerUpすると動作しない

    PHP3からPHP5へバージョンアップするとプログラムが正常動作しなくなりました。 includeファイル内に記述している関数が全く動作しなくなりました。 修復する方法をご存じの方、教えてください。

    • 締切済み
    • PHP
  • Webサービスの参照渡し

    PHP初心者です。調べても有効な情報が得られなかったので質問します。 PHP(5.2.6)から(VB.NET2008で作成した)Webサービスを呼び出したのですが、 引数が値渡しになっているらしく、Webサービスで設定した値が返ってきません。 参照渡しにするにはどうしたらいいのでしょうか? -------------------------------------------------------------- ***[PHP]********************************** <?php $client = new SoapClient("http://IPAdress//WebSv.asmx?WSDL"); $AAA = "AAA"; $params = array('rAAA'=>$AAA); $result = $client->__soapCall("ATOB", array('parameters' => $params)); print_r($AAA); ?> ****************************************** ***[Webサービス]************************** <WebMethod()> _ Public Sub ATOB(ByRef rAAA As String) rAAA = "BBB" End Sub ****************************************** -------------------------------------------------------------- PHPを実行すると BBB と表示させたいが AAA と出てくる。 ちなみに呼び出し自体はうまくいっていて、エラーにもなっていません。

    • ベストアンサー
    • PHP
  • axis SOAP Fault

    お世話になります。 perlクライアントから、axisサーブレット(javaクラス)の呼出を行っています。 サーブレットであるエラーが発生したときに、例外を投げているのですが、 perlクライアント側でその例外をキャッチすることができません。 ▼perlクライアント --------------------------------------------- my $service = SOAP::Lite -> uri('http://xxx/axis/services/TestService') -> proxy('http://xxx/axis/services/TestService?wsdl'); $a = $service->Test( 0, 0 ); unless ( $a->fault ) { print "Success\n"; # Exceptionが発生してもSuccessになる。 } else { print "Error\n"; } ▼javaサーブレットクラス ------------------------------------- public class Test( int a, int b ) { : if ( a==0 || b==0 ) { throw Exception( "testException" ); } : 目的としては、サーブレットクラスの例外を取れればいいのですが、 根本的にやり方が間違っている場合もご指摘いただけると助かります。

  • phpで扱えるファイルサイズ

    お世話になります。 以下の環境で2GBを越えるファイルを対象にfile_exists()やis_file()関数を使うと正常に判定してくれません(ファイルが存在していてもFalseが返る)。コンパイルのオプションやPHPのバージョンアップで解消できるでしょうか?また、他に影響がありそうな関数がありましたら示して頂けると助かります。 <環境> FedoraCore4 (kernel 2.6) php 5.0.4

    • ベストアンサー
    • PHP
  • PHP IDE の Remote Debug

    表題の件について質問します。 環境: Client OS:WindowsXP Server OS:Cent OS 4 Server PHP Version:PHP5.2.0 Debugger Version:ZendDebugger 5.3 PHP IDE にて ZendDebugger を使った Remote Debug をしたいのですが、できた方はいらっしゃいますか? Server にZendDebugger.so をインストール、phpinfo() 関数にてZendDebugger の認識まで確認しています。この段階で、Client のPHP IDE よりデバックすると、Server 側でConnect Deny とおこられます。ログによれば、Server 側ZendDebugger が出力したデバック情報がClient に渡せないようなのです。そもそも、Client からServer にわたるURL を見たところ、debug_host=192.168.0.11%2C127.0.0.1 のような文字列がありました。debug_host はServer が接続する Client IP アドレスと思いますが、これがNG のような気がします。 分かる方からのお返事待ってます。

    • ベストアンサー
    • PHP
  • PHP+mysqlでSQL文に文字数制限はありますか?

    基本的な質問で申し訳ありません。 $sql="......";にSQL文を書き $rst = mysql_query($sql,$con); $col = mysql_fetch_array($rst); として($conはmysql_connect関数の結果です) WEBを作成しているのですが、ある程度以上長いSQL文を書くと正常に作動しません。(短いSQLであれば正常に差作動します。)  当然SQL文自体もmysqlで直接実行すると作動するものです。SQL文自体がUNIONや副問い合わせを多用し250行程度になってしまったためかと考えていますが、文字数制限等があるのでしょうか?PHPには変数宣言が無いと認識しているのでどう対処して良いかわかりません。 SQLを分解できないとすると何か良い方法はありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 例外のキャッチ方法

    お世話になります。 perlクライアントから、SOAP::Liteモジュールでaxisサーブレット(javaクラス)の呼出を行っています。 サーブレットであるエラーが発生したときに、例外を投げているのですが、 perlクライアント側でその例外をキャッチするにはどのようにしたら良いのでしょうか? ●perlクライアント --------------------------------------------- my $service = SOAP::Lite -> uri('​http://xxx/axis/services/test')​ -> proxy('​http://xxx/axis/services/test?wsdl'); $result = $service->Test( 0, 0 ); ●javaサーブレットクラス ------------------------------------- public class test( int a, int b ) { : if ( a==0 || b==0 ) { throw Exception( "testException" ); } :

    • ベストアンサー
    • Perl