[PHP-users 28174] SoapClientでpersistenceな接続

Atsushi Higuchi AHiguchi @ au.atex.com
2006年 1月 20日 (金) 15:16:16 JST


SoapClientを使用してウェブサービスに接続するプログラムを書いているのですが、SoapClientによってサーバにアクセスした戻り値を保存しておき、次にその値を使用してまたサーバにアクセスして次の処理を行いたいと考えています。
問題は、戻り値を得る処理と次の処理の間にブラウザとサーバ間のセッションが一度切れるということです。同じSoapClientを使用して連続して次の処理を行う場合は問題なく行えるのですが、一度切れてしまうと「その値のものは存在しない」とサーバから言われます。サーバ側ではブラウザのセッションで判断しているようなので、実際にはサーバ内にはその値は保持されているのですが、セッションが違うとそれを取得することができないようです。
簡単な例を書きます。

$client = new SoapClient($WSDL);
$x = 0; // 2回目の処理のときにここを1に変更する
if($x == 0)
{
  $res1 = $client->method1();
  print $res1;

  $client->method2($res1); // これは成功する
}
else if($x == 1) // こちらは失敗する
{
  $client->method2($res1);
}

最初に処理されるif文で戻り値をブラウザに表示させ、$xを1に書き換えて再度実行します。ここでうまくいかないのは、恐らく、$clientが2回目の実行時にも新たに生成されるため、1回目の$clientと違うものだからだと思います。
$client自体をセッションに保存して2回目の処理時に使用しようとしたのですが、中身が空になってしまいうまくいきませんでした。
SoapServerにはsetPersistenceなどというものがあり、同じようなことがSoapClientでもできれば問題は解決しそうな気がするのですが。
それから、PHPのSoapClientのページにhttp://php.planetmirror.com/manual/ja/function.soap-soapclient-construct.php

If you connect to a SoapServer, that has been created with session persistence, you can access the server's session id via SoapClient->_cookies[<session_id_name>][0]. This property becomes available after your first client method call.

I have only tested this with session.use_cookies=1.

のようなことが書いてあるのですが、ここで言っているsession_id_nameというのはどのように取ってくるのでしょうか?Cookieは使ってないのですが・・・

どうも、Soapに関する知識がまだ足りないようで、見当はずれなことを言っているかもしれませんが、分かる方いらっしゃいましたらよろしくお願いいたします。

Atsushi Higuchi




PHP-users メーリングリストの案内