インスタンス管理の呼び出しごとのモードを示すために、かなり単純なサンプルを実行しました。静的変数カウンターを使用して各インスタンスのカウントをインクリメントし、インスタンスモードをperCallとして割り当てました。インスタンスはすべてのリクエストに対して破棄されるため、カウント変数の期待される動作は値がインクリメントされないはずですが、観察された動作は、すべてのリクエストに対して、さらには新しいクライアントに対してもカウンター変数が継続的にインクリメントされることです。
これは私のサービスコードです
namespace PerCallInstanceService
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
int MyMethod();
}
}
namespace PerCallInstanceService
{
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class MyService :IMyService
{
public int m_Counter=0;
#region IMyService Members
public int MyMethod()
{
m_Counter++;
return m_Counter;
}
#endregion
}
}
これはクライアント側のコードです。
Console.WriteLine("Service Instance mode: Per-Call");
Console.WriteLine("Client making call to service...");
MyServiceClient proxy = new MyServiceClient();
Console.WriteLine("Counter:" + proxy.MyMethod());
Console.WriteLine("Counter:" + proxy.MyMethod());
Console.WriteLine("Counter:" + proxy.MyMethod());
Console.WriteLine("Counter:" + proxy.MyMethod());
Console.ReadLine();
私のServiceHost: