WCF:Close()真的关闭了连接吗?
我们的WCF服务存在一些问题,我正在进行一些测试: 我刚刚用默认设置创建了新的WCF客户端和服务,并监视它在TCP级别上的工作方式。我使用.NET4.0和net.tcp绑定 我看到的是:使用语句后关闭WCF并没有真正关闭到服务器的连接。。。 在TCP级别上,它应该向服务器发送[FIN]包,但它什么也不做,只是等待并在2分钟内服务器终止与[RST]包的连接。我附上了一些wireshark的截图 我相信这就是wcf的工作原理,但我无法找到一些信息来证实这一点。 我还注意到,在关闭using语句之后,我打开了新的using语句,它使用相同的端口在客户端进行通信。。。(客户端上的端口共享为false) 我的问题是:WCF:Close()真的关闭了连接吗?,wcf,wcf-binding,wcf-client,Wcf,Wcf Binding,Wcf Client,我们的WCF服务存在一些问题,我正在进行一些测试: 我刚刚用默认设置创建了新的WCF客户端和服务,并监视它在TCP级别上的工作方式。我使用.NET4.0和net.tcp绑定 我看到的是:使用语句后关闭WCF并没有真正关闭到服务器的连接。。。 在TCP级别上,它应该向服务器发送[FIN]包,但它什么也不做,只是等待并在2分钟内服务器终止与[RST]包的连接。我附上了一些wireshark的截图 我相信这就是wcf的工作原理,但我无法找到一些信息来证实这一点。 我还注意到,在关闭using语句之后,
- WCF在使用语句后不关闭到服务器的连接的原因是 关门了
- 我能做些什么使其正确地关闭连接(发送[FIN]声明)
这里是猜测,但netTcpBinding确实实现了。WCF将“挂起”TCP连接,直到某些内部参数/逻辑决定可以释放它。这就是Dispose方法可以“按设计”抛出异常的原因之一
{My 2:不管WCF设计者如何合理化自己的决定,在现实世界中,这是一件非常危险的事情。}看起来减少idleTimeout可以减少重置包的数量,并且将maxOutboundConnectionsPerEndpopint设置为0始终正确关闭连接