セッションモードで実行するように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がクライアントとのセッションを維持していないことに気づきました-おそらくそれは私の問題でした。確かにそれが問題でした。シンプルなコンソールクライアントからサービスに接続すると、サービスが正常に機能することが確認されました。