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

Atsushi fuzuki @ 104.net
2006年 1月 20日 (金) 19:20:44 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<fuzuki @ 104.net>



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