真的值得汇集 WCF 代理客户端,还是在每次调用给定方法时实例化一个新代理更好?
顺便问一下,有没有人愿意分享这种代理的池模式?
值得缓存ChannelFactory
,因为它的构建成本很高。由添加服务引用(或直接)生成的代理svcutil.exe
在某些情况下会执行此操作(通常,如果您想要此缓存,则不得在代码中构建绑定)。如果您ChannelFactory
手动构建(您不使用生成的代理),则取决于您将其存储在某处,而不是每次需要时都对其进行初始化。
汇集代理可能没有多大意义。对于无状态服务,代理创建应该很快(如果您有缓存工厂)。对于有状态的服务,您不希望在多个“客户”之间共享代理。连接级别本身也有池化。HTTP 绑定默认使用称为持久连接的东西。这些连接可以被多个代理重用。Net.tcp 和 net.pipe 绑定在内部使用连接池。这意味着代理的生命周期不必与连接的生命周期相同。