繁体   English   中英

WCF 客户端代理初始化

[英]WCF client proxy initialization

我正在使用 WCF 服务并使用 VS 2008 服务参考创建其代理。

我正在寻找调用 WCF 服务方法的最佳模式

  • 我是否应该在每次调用服务方法时创建客户端代理实例并在完成后立即关闭客户端? 当我分析我的客户端应用程序时,我可以看到在初始化代理客户端时需要花费大量时间来获取通道
  • 我是否应该为客户端代理使用单例模式,以便我可以使用唯一的一次实例并摆脱重新初始化的开销? 这种方法有什么隐藏的问题吗?

我正在使用 .Net framework 3.5 SP1, basicHttp绑定,几乎没有定制。

这取决于 ;-)

如果您的应用程序中有一个序列需要一个接一个地进行多次调用,您可以继续使用代理客户端并继续使用它进行进一步调用。 但请注意检查“故障”状态 - 如果服务器上发生错误,则客户端代理和服务器之间的通道可能会“出错”,因此您的客户端代理将无法使用。

此外 - 昂贵的部分是ChannelFactory<T>的创建 - 当您在代码中创建客户端 proyx 时,您可以尝试将这两个步骤分开:

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>();

坚持那个频道工厂,例如将其缓存在某处

就时间和马力而言,第二步应该不那么密集:

IYourService client = factory.CreateChannel();

您可以在每次调用(或调用序列)之前执行此步骤,并且不应该因此而获得糟糕的性能,真的。

我强烈建议尽可能避免单例 - 这就像打开一罐蠕虫,除非您绝对必须,否则不要这样做(例如,管理对一次仅对一个调用者可用的单个资源的访问权限)。

马克

很抱歉提出一个老问题,但我想添加这个以便于参考。

我完全同意marc_s 和rally25rs。 所以从那里开始,但也要考虑使用处理故障状态的代理或包装器。 这是关于 SO 的一个问题,讨论了一些解决方案,这是我在 Corneliu 的互联网上遇到的另一个很好的解决方案,“构建可重用的 ClientBase 代理”。 他的解决方案会生成包装器来公开您的服务方法,以获得最大的便利性和性能。 我仍然需要测试它是否有效:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM