【问题标题】:WCF: Does Close() really close connection?WCF:Close() 真的关闭连接吗?
【发布时间】:2012-02-22 12:04:44
【问题描述】:

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

我所看到的:在 using 语句关闭 WCF 后并没有真正关闭与服务器的连接... 在 TCP 级别上,它应该将 [FIN] 包发送到服务器,但它什么也不做,只是等待并在 2 分钟内服务器终止连接与 [RST] 包。我附上了一些来自wireshark的截图

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

我的问题:

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

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

【问题讨论】:

    标签: wcf wcf-binding wcf-client


    【解决方案1】:

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

    {我的 2 美分:不管 WCF 设计师如何合理化这个决定,在现实世界中,这样做是一件非常危险的事情。}

    【讨论】:

    • 看起来减少 idleTimeout 可以减少重置包的数量,并且将 maxOutboundConnectionsPerEndpopint 设置为 0 始终正确关闭连接
    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 2015-04-16
    • 2010-10-27
    • 2019-07-27
    • 2012-05-31
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多