当WCF并发模式设置为多个时,连接失败

时间:2014-09-23 06:08:45

标签: .net web-services wcf c#-4.0 concurrency

我正在研究WCF。我希望并发类型为多个,意味着每个请求都有多个线程。我已经在Service类实现中定义的方法和接口中的prototype define中设置了参数。我在服务中使用以下参数,如下所示

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,
    InstanceContextMode = InstanceContextMode.PerCall,
    ReleaseServiceInstanceOnTransactionComplete = false,
    TransactionIsolationLevel = System.Transactions.IsolationLevel.ReadCommitted)]
    public class BusinessPartnerService : IBusinessPartnerService

现在,当我将服务上的任何方法从一个服务调用到另一个服务时,会抛出异常:

  

底层连接已关闭:服务器已关闭预期保持活动状态的连接。

我错过了一些配置还是其他什么?任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

ConcurrencyMode.MultipleInstanceContextMode.PerCall一起使毫无意义

InstanceContextMode.PerCall表示每个请求都会获得服务类的自己的实例来处理请求 - 因此ConcurrencyMode.Multiple完全没有意义,因为每个请求无论如何都有自己的服务类实例。

没有多线程/请求想要使用相同服务类实例的可能性 - 每个都有自己的实例。

在WCF中执行操作的首选方法是InstanceContextMode.PerCall(每个请求都有自己的,独立的服务类实例来处理其工作)与ConcurrencyMode.Single相结合(因为每个服务类实例都将无论如何只处理一个请求!)

如果您有一个需要同时处理多个请求的单件服务类(ConcurrencyMode.Multiple),

InstanceContextMode.Single才会有意义。然而,这会给你带来很多额外的努力 - 该服务类单例的实现必须是100%线程安全 - 这不是一件容易的事!