单个WCF信道性能与多个信道

Bjo*_*eul 10 c# wcf

我有一个应用程序一遍又一遍地重用相同的WCF通道.我通过工厂对象保留静态引用.我想知道这是好的实践还是我应该打开x频道并通过这些频道循环所有服务呼叫而不是使用单一频道?

如果仅使用1个通道,这些服务调用是否会排队,或者当我使用x通道时会发生同样的情况吗?

Dar*_*rov 11

您应该为所有请求使用单个通道工厂,但应为每个请求构建不同的通道.切勿重复使用频道 它们创建起来并不昂贵,也不是线程安全的.创建的成本是渠道工厂.它是线程安全的,可以重复使用.当然,如果通道工厂进入故障状态,您可能需要重新打开它.

  • @ ErnieL,`重用相同的代理`意味着`重用相同的通道工厂',而不是'重用相同的通道`.有一个很大的不同. (3认同)

DEL*_*zed 6

@Darin Dimitrov

重用相同的代理 在许多情况下,您可能希望重用相同的代理.这具有最佳性能.当您使用安全功能时尤其如此,因为初始安全协商可能会产生高成本.

代理等于渠道.如果您查看此博文,您可以看到以下代码段:

ISimpleContract proxy = factory.CreateChannel();
((IClientChannel)proxy).Open();
Run Code Online (Sandbox Code Playgroud)

此外,如果您计划使用会话,则不希望为每个请求建立新会话(通过每次创建新的通道/代理).