我有一个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时,析构函数没有被调用?为什么?这是否意味着服务对象仍在服务器上运行?
答案 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>
因此,最好在关闭应用之前始终处置您的客户。