0

インスタンス管理の呼び出しごとのモードを示すために、かなり単純なサンプルを実行しました。静的変数カウンターを使用して各インスタンスのカウントをインクリメントし、インスタンスモードを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:

4

2 に答える 2

0

InstanceContextMode.PerSession ではなく InstanceContextMode.PerCall を使用する必要があります

于 2012-07-10T12:10:17.570 に答える
0

あなたの質問には、「カウントをインクリメントするために静的変数カウンターを使用しました」と記載されていますが、コードには静的変数がありません。ただし、静的を使用している場合は、PerCall であっても、呼び出しごとにオブジェクトが再作成されているにもかかわらず、カウンターは増加し続けます。静的変数は、呼び出しが行われるたびに作成されるオブジェクトのインスタンスには含まれません。オブジェクトが作成されると、アセンブリがアンロードされるまで、対応する静的変数がメモリ内に残ります。

于 2014-08-01T03:24:42.817 に答える