WCF惨败
START_RANT
甚至 Microsoft 和 WCF 团队都知道,由于各种性能问题而设计的方式和ChannelFactory方式以及更改方式是一场真正的惨败。仅仅代理的处理是一个真正的混乱就足以知道在 WCF 的可扩展性之下,我们正在处理一个低效、臃肿和复杂的设计。只是坏坏坏。ChannelClientBase
END_RANT
好的,您可能已经查看了文档,但我认为您无法找到答案——因为我没有找到答案——因为没有简单的答案。但是在这里,我的发现有望总结这些要点(您在下面的任何 MS 文档中都找不到):
1) 我们有ChannelFactory和IChannel。ChannelFactory知道如何与传输和通道通信知道如何将参数解释为 WCF 方法调用,反之亦然。IChannel是“实现”(或看起来像实现)您的服务接口的接口,而 ChannelFactory 具有通信所需的所有抽象(包括端点、安全性等)。
2)ClientBase不过是两者ChannelFactory并IChannel拼凑在一起。所以很明显,创建一次 ChannelFactory 然后一遍又一遍地创建通道意味着它更有效,但是正如你所猜测的那样,这并不容易,因为......
3)ChannelFactory一经打开,不可更改。这意味着如果您使用用户名密码连接到 WCF 服务并且用户名密码更改,那么您需要一个新的。这似乎不是一个大问题,但它在 ASP NET 场景中成为一个大问题。
4)实际上重用相同ChannelFactory的IChannel底层通信通道,因此关闭 ChannelFactory 将使 IChannel 无效。这会在清理代码和决定关闭连接的责任方面造成混乱。
5) 如您所见,没有简单的答案。如果您不必在运行时使用用户名/密码或更改配置,请创建并缓存 ChannelFactory,然后只创建通道。在任何情况下ChannelFactory,IChannel都比 更有效ClientBase。