2014-09-23 78 views
0

我正在使用WCF。我想要并发类型multiple,意味着每个请求上有多个线程。我已经在Service类实现中定义的方法和接口中的原型定义中设置了参数。我使用的服务下面的参数如下当WCF并发模式设置为多个时,连接失败

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

现在,当我呼吁我的服务有任何方法从一个服务到另一个,然后抛出一个异常:

基础连接被关闭:一个服务器关闭了预期保持活动状态的连接。

我是否缺少一些配置或其他内容?任何帮助将不胜感激。

+0

你在使用SoapUI这样的工具吗?它可能仅取决于客户端配置。 – Codor 2014-09-23 06:30:50

回答

1

ConcurrencyMode.MultipleInstanceContextMode.PerCall使得没有意义在一起。

InstanceContextMode.PerCall意味着,每一个单独的请求会得到服务类的公司自己的实例来处理请求 - 因此,ConcurrencyMode.Multiple是完全没有意义的,因为每个请求都有自己的服务类的实例反正。

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

在WCF中执行任务的首选方式是InstanceContextMode.PerCall(每个请求都有自己独立的服务类实例来处理它的工作)与ConcurrencyMode.Single相结合(因为每个服务类实例将永远只处理单个请求!)

ConcurrencyMode.Multiple只有当您有一个需要同时处理多个请求的单例服务类(InstanceContextMode.Single)时才有意义。然而,这然后会在你身边带来很多额外的努力 - 该服务类单例的实现必须是100%线程安全 - 这不是一件容易的事情!

+0

以及InstanceContextMode.PerSession如何。那种情况会发生什么?在这种情况下它不会工作正常吗? – 2014-09-23 09:14:32

+0

@NomiAli:per-session表示:第一次调用获得一个全新的服务类实例,并且每个后续调用都会得到相同的实例 - 但是又一次:**每个**请求都有**自己的实例**的服务类 - 完全不需要'ConcurrencyMode.Multiple'! – 2014-09-23 09:27:37

+0

它的意思如果我想实现并发对多个服务与不同的线程并发工作我需要使用Single InstanceContextMode和代码对它? – 2014-09-23 09:51:25

相关问题