WCF:Close()真的关闭连接吗?

时间:2012-01-30 17:40:07

标签: wcf wcf-binding wcf-client

我们遇到了一些WCF服务问题,我正在做一些测试: 我刚刚使用默认设置创建了新的WCF客户端和服务,并监控它在TCP级别上的工作方式。我使用.net 4.0和 net.tcp 绑定

而我所看到的:在使用语句后关闭WCF并没有真正关闭与服务器的连接...... 在TCP级别上,它应该将[FIN]包发送到服务器,但它不会做任何事情,只需等待并在2分钟内服务器终止连接和[RST]包。我附上了wireshark的一些截图

我相信这是wcf的工作原理,但我无法找到一些信息来确认它。 另外我注意到,如果在关闭using语句后,我打开新的using语句,它使用相同的端口在客户端进行通信...(在客户端端口共享是错误的)

我的问题:

  • 为什么在使用语句后WCF不关闭与服务器的连接 闭合?
  • 如何才能正确关闭连接(发送[FIN]语句)?

感谢。 附:我没有附加任何配置,因为它是VS2010为我创建的默认值。

wcf communication on tcp level

1 个答案:

答案 0 :(得分:1)

在这里猜测,但netTcpBinding确实实现了a connection cache。 WCF将“挂起”到TCP连接,直到某些内部参数/逻辑决定它可以被释放。这就是Dispose方法可以“按设计”抛出异常的原因之一。

{我的2¢:无论WCF设计师如何通过这个决定对自己进行合理化,在现实世界中,这样做是非常危险的。}