当我关闭客户端应用程序而不在客户端调用“关闭”方法时,为什么WCF不会销毁对象?

时间:2009-06-16 09:08:53

标签: wcf destructor

我有一个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时,析构函数没有被调用?为什么?这是否意味着服务对象仍在服务器上运行?

1 个答案:

答案 0 :(得分: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>

因此,最好在关闭应用之前始终处置您的客户