WCF服务端短时间内连接了超过400个客户端,再有新的连接请求则不再接收,报错1min连接超时。
解决思路是不用的连接,释放掉,不要占用资源。
释放的方法如下,
var deathService = m_Service as ICommunicationObject;
try
{
deathService.Close();
}
catch (System.ServiceModel.CommunicationException)
{
deathService.Abort();
}
catch (TimeoutException)
{
deathService.Abort();
}
catch (Exception)
{
deathService.Abort();
}
ICommunicationObject的接口释放连接资源,所有的客户端对象都实现了ICommunicationObject接口。
m_Service 是继承wcf服务接口,并且建立连接的对象,客户端用来与服务端沟通的东西。
使用场景:
1,是客户端主动知道自己已经不需要与服务端对话了,直接进行释放。
2,客户端不知道自己是不是还需要与服务端会话,这就需要服务端通过回调来告诉客户端,客户端在释放。
3,客户端想要服务端保持一个长连接,这个可以使用心跳包来实现,在心跳包中去实现释放。