【发布时间】:2010-10-26 13:46:36
【问题描述】:
在我当前的 Web 项目中,我们为远程服务的每个方法调用执行一个 ClientFactory.CreateChannel。
这真的有必要吗? 最佳做法是什么?
【问题讨论】:
标签: wcf
在我当前的 Web 项目中,我们为远程服务的每个方法调用执行一个 ClientFactory.CreateChannel。
这真的有必要吗? 最佳做法是什么?
【问题讨论】:
标签: wcf
这在某种程度上取决于您的要求。相对而言,开通渠道成本较高。最佳实践是让进行远程调用的类实现 IDisposable,它应该调用一次 ClientFactory.CreateChannel,在所有方法调用中使用通道,并在调用 Dispose 方法时关闭通道。也就是说,如果调用远程服务的方法之间的时间很长(比通道上的默认空闲超时时间长,即 10 分钟),那么执行 ClientFactory.CreateChannel 并不是特别有害,但我会说最好还是走 IDisposable 路线并使用 'using' 关键字封装类的使用
【讨论】:
为每个方法调用创建一个新通道“通常”是一种不好的做法。
对于双工 WCF 服务
创建单个通道并使用它,直到不再需要与服务器通信/或者该通道被关闭。
创建频道后,在调用服务器之前,建议检查频道的状态(错误、打开、关闭)。
建议注册通道关闭/错误事件,以便在发生时立即了解。因此您可以采取必要的措施或/并使用相同的对象通道对象引用再次创建通道。
普通 WCF 服务
创建代理模式,创建通道/重用/重新创建,错误处理和处置。设置适当的不活动超时以及最适合您的解决方案的 WCF 客户端的代理适当配置。
始终加载测试!!!!
【讨论】: