2011-01-11 14 views
1

データベースへのクエリを実行するASP.NET Webサービスを開発しました。今、データベースにアクセスする必要のあるWebサービスを消費するPHP Webサイトを開発しています。 ステートレス Webサービスへのクライアントを取得する手段として、私はすでにこの機能をテストして、それが仕事をしPHPのSoapClientを使用してリクエスト間でセッションデータを保存する

function get_soap_client() 
{ 
    if (!file_exists('wsdl_path.txt') 
     return NULL; 

    if (!$file = fopen('wsdl_path.txt', 'r')) 
     return NULL; 

    $path = fgets($file); 
    fclose($file); 

    return new SoapClient($path); 
} 

:私は、Webサービスを消費するために新しいのSoapClientを作成し、以下の機能を書かれています。例えば、これは、(その制御フローの状態に影響されません)私のWebサイトのログイン機能である:

順番に、次のWebメソッドを呼び出します
function try_login($user, $pass) 
{ 
    $client = get_soap_client(); 

    // ASP.NET Web Services encapsulate all inputs in a single object. 
    $param = new stdClass(); 
    $param->user = $user; 
    $param->pass = $pass; 

    // Execute the WebMethod TryLogin and return its result. 
    // ASP.NET Web Services encapsulate all outputs in a single object. 
    return $client->TryLogin($param)->TryLoginResult; 
} 

[WebMethod(EnableSession = true)] 
public bool TryLogin(string user, string pass) 
{ 
    SqlParameter[] pars = new SqlParameter[2]; 
    pars[0] = new SqlParameter("@User", SqlDbType.VarChar, 20); 
    pars[0].Value = user; 
    pars[1] = new SqlParameter("@Pass", SqlDbType.VarChar, 20); 
    pars[1].Value = pass; 

    // The Stored Procedure returns a row if the user and password are OK. 
    // Otherwise, it returns an empty recordset. 
    DataTable dt = Utilities.RetrieveFromStoredProcedure('[dbo].[sp_TryLogin]', pars); 
    if (dt.Rows.Count == 0) // Wrong user and/or password 
    { 
     Context.Session.Abandon(); 
     return false; 
    } 
    else 
     return true; 
} 

しかし、私は知りませんWebサービスのContext.Sessionデータが、SoapClientオブジェクトからの連続した要求の間に保存されるかどうかは、get_soap_client()によって取得されます。

  1. は、WebサービスのContext.Sessionデータは、get_soap_client()によって取得SoapClient物から作られた連続したリクエストの間で保存されている:だから私は、次のような質問がありますか?

  2. は、WebサービスのContext.Sessionデータは、私はそれらを必要として、その場で検索し異なるSoapClientオブジェクトから作られた連続したリクエスト間で保持されていますか?

  3. 答えが「いいえ」の場合、SoapClientのセッションデータをPHP状態変数にシリアル化する方法はありますか?

+0

あなたは現在$ _SESSIONのデータを意味していますか? – Stephen

+0

いいえ、実際にはWebサービスの「Context.Session」データを意味しました。 PHPの '$ _SESSION'配列にできるだけ少ないデータを残したいと思います。 – pyon

答えて

1

ああ、それはセッションIDを送信しているということです。私はあなたのウェブサービスにセッションIDを持つクッキーを設定するために__setCookieを手動で呼び出す必要があると思います。 "状態情報" による

http://php.net/manual/en/soapclient.setcookie.php

関連する問題