セッションを使用するようにWCFの構成に問題があります
-
27-09-2019 - |
質問
セッションモードで実行するように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);
}
所属していません StackOverflow