4

我有一个 net tcp WCF 服务如下

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    public class AVService : IAVService
    {
        static int _numberofInst = 0;
        public AVService()
        {
            ++_numberofInst;
            Console.WriteLine("Number of instances "+_numberofInst);
        }
        ~AVService()
        {
            --_numberofInst;
            Console.WriteLine("Number of instances " + _numberofInst);
        }
        public void Foo(){}
    }

当我在客户端创建一个对象如下

AVService client = new AVService();
client.Foo();

构造函数被调用,但是当我关闭客户端应用程序而不调用close mehotd时,没有调用析构函数?为什么?这是否意味着服务对象仍然在服务器上工作?

4

1 回答 1

3

是的 - 如果您没有明确处置您的客户端,服务器将“徘徊”一段时间(因为您指定了 PerSession模式)。

它最终会超时(由InactivityTimeout绑定配置上的设置指定),并将被销毁。但这可能需要一些时间(几分钟到几个小时,具体取决于您的设置)。

<bindings>
   <netTcpBinding>
      <binding name="NetTcp_Reliable" receiveTimeout="00:20:00">
         <reliableSession enabled="true" ordered="false" 
                          inactivityTimeout="00:15:00" />
      </binding>
   </netTcpBinding>
</bindings>

因此,最好在关闭应用程序之前处理掉您的客户端

于 2009-06-16T10:24:17.387 回答