0

我做了一个相当简单的示例来演示实例管理的 Per Call 模式。我使用静态变量计数器来增加每个实例的计数,并将实例模式分配为 perCall。count 变量的预期行为应该不应该增加值,因为实例是针对每个请求进行处理的,但是观察到的行为是 counter 变量对于每个请求甚至对于新客户端都连续增加。

这是我的服务代码

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();

我的服务主机:

4

2 回答 2

0

您的问题指出,“我使用静态变量计数器来增加计数”,但您的代码没有静态变量。但是,如果您使用的是 static ,那么即使它是 PerCall 并且尽管在每次调用时都重新创建了对象,计数器也会继续增加。静态变量不会出现在每次调用时创建的对象实例之外。一旦创建了一个对象,相应的静态变量将保留在内存中,直到程序集被卸载。

于 2014-08-01T03:24:42.817 回答
0

您必须使用 InstanceContextMode.PerCall 而不是 InstanceContextMode.PerSession

于 2012-07-10T12:10:17.570 回答