我有一个应用程序一遍又一遍地重用相同的WCF频道。我通过工厂对象保留静态引用。我想知道这是不是很好,或者我应该打开x频道并通过这些频道循环所有服务电话而不是使用单一频道?
如果只使用1个频道,这些服务调用是否会排队?或者当我使用x频道时会发生同样的情况吗?
答案 0 :(得分:11)
您应该为所有请求使用单个通道工厂,但应为每个请求构建不同的通道。切勿重复使用频道它们创建起来并不昂贵,也不是线程安全的。创建的成本是渠道工厂。它是线程安全的,可以重复使用。当然,如果通道工厂进入故障状态,您可能需要重新打开它。
答案 1 :(得分:6)
@Darin Dimitrov
重复使用相同的代理 在许多情况下,您可能希望重用相同的代理。这具有最佳性能。当您使用安全功能时尤其如此,因为初始安全协商可能会产生很高的成本。
代理等于渠道。如果您查看this blog post,则可以看到以下代码段:
ISimpleContract proxy = factory.CreateChannel();
((IClientChannel)proxy).Open();
此外,如果您计划使用会话,则不希望为每个请求建立新会话(通过每次创建新的频道/代理)。