我正在编写一个使用 WCF 传输文件的应用程序。传输是分段完成的,因此可以在任何不可预见的中断后恢复。
我的问题是关于客户端代理的使用,是让它保持打开状态并重新使用它来传输每个文件段更好,还是我应该在每次发送内容时重新打开它?
最佳答案
尽快关闭代理的原因是您可能有一个占用系统资源的 session (netTcpBinding 使用传输级 session ,wsHttpBinding 可以使用基于安全或可靠性的 session )。
但您是对的 - 只要客户端代理未处于故障状态,您就可以完全重用它。
如果您想更进一步,并且如果您可以在服务器和客户端之间共享一个具有服务和数据契约的通用程序集,则可以将客户端代理的创建分为两个步骤:
创建
ChannelFactory<IYourServiceContract>
一次并缓存它——这是一个非常昂贵和资源密集型的操作;由于您需要使用服务契约(Contract)(接口(interface))使其成为通用的,因此您需要能够在服务器和客户端之间共享契约(Contract)鉴于该工厂,您可以使用
factory.CreateChannel()
创建您的 channel 根据需要 - 此操作不那么“繁重”,可以快速、一遍又一遍地完成
这是您可以研究的一种可能的优化 - 考虑到您控制通信两端的场景,并且您可以在服务器和客户端之间共享契约(Contract)程序集。
关于C#、WCF、何时重用客户端代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920583/