C#,WCF,何时重用客户端代理

And*_*rew 4 c# wcf

我正在编写一个使用WCF传输文件的应用程序.转移是分段完成的,以便在任何不可预见的中断后恢复.

我的问题是关于客户端代理的使用,是不是更好地保持它打开并重用它来传输每个文件段,还是每次我想发送东西时我应该重新打开它?

mar*_*c_s 11

尽快关闭代理的原因是您可能正在建立一个占用系统资源的会话(netTcpBinding使用传输级会话,wsHttpBinding可以使用基于安全性或基于可靠性的会话).

但你是对的 - 只要客户端代理不处于故障状态,你就可以完全重用它.

如果您想更进一步,如果您可以与服务器和客户端之间的服务和数据协定共享公共程序集,则可以将客户端代理创建分为两个步骤:

  • 创建ChannelFactory<IYourServiceContract>一次并缓存 - 这是一项非常昂贵且资源密集的操作; 由于您需要使用服务合同(接口)使其成为通用,因此您需要能够在服务器和客户端之间共享合同

  • 鉴于工厂,你可以factory.CreateChannel()根据需要创建你的频道- 这个操作不那么"沉重",可以快速一遍又一遍地完成

这是您可以查看的一种可能的优化 - 给定您控制通信两端的方案,并且您可以在服务器和客户端之间共享合同程序集.