質問

セッションモードで実行するようにWCFサービスを構成するのに問題があります。テストとして、私はこの簡単なサービスを書きました:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string AddData(int value);
}

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
internal class Service1 : IService1,IDisposable
{
    private int acc;

    public Service1()
    {
        acc = 0;
    }

    public string AddData(int value)
    {
        acc += value;
        return string.Format("Accumulator value: {0}", acc);
    }

    #region IDisposable Members

    public void Dispose()
    {           
    }

    #endregion
}

信頼できるセッションフラグを有効にして、デフォルト構成でnet.tcpバインディングを使用しています。私が理解している限り、そのようなサービスはセッションモードで問題なく実行する必要があります。ただし、サービスはコールモードごとに実行されます。AddDataを呼び出すたびに、コンストラクターが呼び出され、addDataを実行し、dispose()はコールの後に呼び出されます。なぜこれが起こっているのかという考えはありますか?多分私は何かが足りないのですか?

注:それが関連しているかどうかはわかりませんが、VS2008を使用してこれを実行しています。

更新:気づきました ここ wcftestclientはクライアントとのセッションを維持していません - 多分それは私の問題だったかもしれません。確かにそれが問題でした。 Simple Consoleクライアントからサービスに接続すると、サービスが必要な場合に機能することが確認されました。

役に立ちましたか?

解決

ServiceContractを定義するときは、セッションモードを必要とします。

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IService1
{
  [OperationContract]
  string AddData(int value);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top