我有一个单独的WCF服务,它拥有用于与外部通信的套接字。我使用的是.NET 3.5 SP1
代码是线程安全的并且可以很好地扩展。
当我在Windows 2008 R2 64位上的IIS 7.5中托管的WCF服务中运行此代码时,WCF服务无法接受多个并发调用。
我的服务类实现了三个接口,每个接口都有一个标准的ServiceContract属性,只有一个命名空间,没有其他设置
我在课堂上有以下属性:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
我有以下行为配置:
<behavior name="MyServiceAsyncBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceThrottling maxConcurrentCalls="60" maxConcurrentSessions="60"
maxConcurrentInstances="60" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
我创建了一个单独的应用程序,使用了完全相同的配置文件(字面意思是副本,没有对它进行任何更改),以及在类上具有完全相同的ServiceBehavior属性的单例服务类。该服务不会表现出相同的行为,它很乐意允许并发呼叫。
允许并发调用的测试服务和不实际服务的唯一区别是真实服务拥有工作线程和TCP套接字,并实现三个接口而不是一个。
我在这里缺少什么?
答案 0 :(得分:0)
我发现了这个问题。它涉及远程TCP服务。我正在使用一种不良的测试服务,它从未返回给调用者。
WCF似乎阻止了对单例的并发调用,因为单例被锁定在紧密循环中