关闭/中止WCF频道/代理时会发生什么?

时间:2011-05-05 22:51:39

标签: wcf proxy

我正在尝试更好地了解使用WCF代理时发生的情况。我无法理解当我关闭(或不关闭)代理时会发生什么。

  • 当我在WCF代理上调用Close()或Abort()时会发生什么?有什么区别?
  • 绑定类型之间有何不同(例如,无会话的BasicHttpBinding与会话类型)?
  • 为什么Close()会在某些情况下抛出,为什么它会成为阻塞操作?

1 个答案:

答案 0 :(得分:23)

关闭WCF客户端
客户端负有优雅地关闭连接的继承责任。始终建议关闭代理客户端。如果客户端和服务之间的绑定是传输层会话,那么关闭代理对于拆除双方之间的连接至关重要。服务具有为并发连接定义的有效负载阈值。如果并发连接数超过此阈值线性,则整体服务性能指数。这就是为什么尽快处理连接至关重要的原因。关闭代理还会通知服务实例它已不再使用,并且可能由GC收集(受服务实例管理)。如果客户端没有关闭连接,它仍然会被WCF超时自动拆除(在配置文件中找到)。

中止WCF客户端
在服务 - 客户端交互出现故障的情况下,两端的对象可能完全被破坏。因此,不建议在异常之后使用代理。鉴于WCF绑定使用传输会话,故障后的客户端甚至无法关闭它(如果没有传输层会话,则客户端可以使用或关闭代理,但不建议这样做,因为会话的配置可能更改)。因此,在发生故障后,唯一安全的操作是中止代理。

Close是一个同步操作,如果传输会话已被故障损坏,它可以抛出,并且它是一个阻塞操作,直到收到来自服务的确认响应(对于某些绑定是真的)。​​