【问题标题】:WCF CreateChannel for every method call每个方法调用的 WCF CreateChannel
【发布时间】:2010-10-26 13:46:36
【问题描述】:

在我当前的 Web 项目中,我们为远程服务的每个方法调用执行一个 ClientFactory.CreateChannel。

这真的有必要吗? 最佳做法是什么?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    这在某种程度上取决于您的要求。相对而言,开通渠道成本较高。最佳实践是让进行远程调用的类实现 IDisposable,它应该调用一次 ClientFactory.CreateChannel,在所有方法调用中使用通道,并在调用 Dispose 方法时关闭通道。也就是说,如果调用远程服务的方法之间的时间很长(比通道上的默认空闲超时时间长,即 10 分钟),那么执行 ClientFactory.CreateChannel 并不是特别有害,但我会说最好还是走 IDisposable 路线并使用 'using' 关键字封装类的使用

    【讨论】:

    • 实际上:创建通道是相当轻量级的——创建 ChannelFactory 对性能来说是相当“重”的......
    • @marc_s:我认为这取决于,例如,如果通道具有安全性,则每次打开服务的套接字时都会进行安全协商,这可能会导致您的方法调用占用大量时间更长,恕我直言。
    • @marc_s 他们没有改进 ChannelFactory 的创建吗?或者至少我确定我读到他们在第一次之后改进了创作。更新:blogs.msdn.com/b/wenlong/archive/2007/10/27/…
    【解决方案2】:

    为每个方法调用创建一个新通道“通常”是一种不好的做法。

    对于双工 WCF 服务

    创建单个通道并使用它,直到不再需要与服务器通信/或者该通道被关闭。

    创建频道后,在调用服务器之前,建议检查频道的状态(错误、打开、关闭)。

    建议注册通道关闭/错误事件,以便在发生时立即了解。因此您可以采取必要的措施或/并使用相同的对象通道对象引用再次创建通道。

    普通 WCF 服务

    创建代理模式,创建通道/重用/重新创建,错误处理和处置。设置适当的不活动超时以及最适合您的解决方案的 WCF 客户端的代理适当配置。

    始终加载测试!!!!

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2016-10-21
      • 2015-12-01
      • 2014-10-12
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多