2012-01-30 51 views
4

我们有一些与WCF服务有关的问题,我正在做一些测试: 我刚刚创建了新的WCF客户端和服务默认设置并监控它如何在TCP级别上工作。我使用.NET 4.0和的net.tcp结合WCF:Close()是否真的关闭连接?

而我所看到的:使用声明后关闭WCF并没有真正的服务器紧密结合... 在TCP层应发送[FIN]包服务器,但是它不做任何事情,只是在等待和在2分钟内服务器终止连接与[RST]包。我附上了wireshark的一些截图

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

我的问题:

  • 为什么WCF不使用关闭连接到服务器后使用语句是 关闭?
  • 我该怎么做才能使它正确关闭连接(发送[FIN]语句)?

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

wcf communication on tcp level

回答

1

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

{我的2¢:不管这个决定合理化自己,在现实世界中的WCF设计师如何,这是一个非常危险的事情已经做了。}

+0

看起来像减少的idleTimeout可以减少数量的重置包,并将maxOutboundConnectionsPerEndpopint设置为0,始终关闭连接 – 2012-01-31 15:04:34