0

私は非常にシンプルなサービスを提供しています:

[ServiceContract]    
public interface IPncService
{
    [System.ServiceModel.Web.WebGet(UriTemplate = "set/{val}")]
    [OperationContract]
    bool SetVariable(string val);

    [System.ServiceModel.Web.WebGet(UriTemplate = "get")]
    [OperationContract]
    string GetVariableVal();
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class PncService : IPncService
{
    string someVariable;

    public bool SetVariable(string val)
    {
        if (string.IsNullOrWhiteSpace(val))
            return false;
        else
        {
            someVariable = val;
            return true;
        }            
    }

    public string GetVariableVal() {
        return someVariable;
    }
}

someVariable変数がセッションごとの値を保持しないのはなぜですか?

言い換えれば、私がそうするなら:

ここに画像の説明を入力してください

次に、次の場所に移動します。

ここに画像の説明を入力してください

の値はなぜsomeVariable = nullですか?別のセッションですか?setメソッドを呼び出した直後に、同じブラウザでそのメソッドを呼び出します...

4

1 に答える 1

3

この記事を読む必要があります:http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx

短縮版 :

WCFセッションは、ASP.NETセッションとは大きく異なります。要するに、

  • WCFセッションは(CLRオブジェクトとして)サービスインスタンスとして表され、状態は各サービスインスタンスの一部です。セッションは、呼び出し元のWCFクライアントによって開始されます。WCFは、セッションの相関関係を提供するために特別なコンテキストに依存しています:セッションフルチャネル、安全な会話、信頼できるメッセージングなど。
  • ASP.NETセッションは、さまざまな要求間で共有されるデータストレージのようなものです。セッションは常にサーバーによって開始されます。ASP.NETは、セッションの相関関係を提供するためにCookieまたは特別なUrigooに依存しています。

したがって :

セッション状態の有効化ASP.NETセッション状態を有効にするのは非常に簡単です。web.configで指定されているように、ASP.NET互換モードでWCFサービスを実行する必要があるだけです。

于 2012-12-07T16:20:19.800 に答える