我们有像
这样的WCF服务Public Class MyService
{
[OperationContract]
Public void OpperationA()
{
}
[OperationContract]
Public void OpperationB()
{
}
[OperationContract]
Public void OpperationC()
{
}
[OperationContract]
Public void OpperationD()
{
}
}
我们有一个这个WCF服务的客户端,它是一个Windows服务,它使用新的代理调用OperationA / B / C / D以上的所有操作。
在当前实施中,我们遇到了客户端同时调用所有操作的问题 InstanceContextMode = PerCall和ConcurrencyMode = Single
InstanceContextMode和COncurrency是否有任何组合可以改变我的服务,一次只能接受一个请求,我的意思是如果客户端代理A调用OPerationA并且服务正在处理请求,并且客户端代理B试图调用OperationB(或任何其他操作),应该被阻止,直到第一个请求完成。
由于
答案 0 :(得分:3)
将InstanceContextMode更改为Single就足够了。来自MSDN文档here:
ConcurrencyMode = Single :服务实例是单线程的,不接受可重入的调用。如果InstanceContextMode属性为Single,并且在实例为调用提供服务时其他消息到达,则这些消息必须等到服务可用或消息超时。
答案 1 :(得分:0)
来自http://msdn.microsoft.com/en-us/library/system.servicemodel.instancecontextmode%28v=vs.110%29.aspx
如果InstanceContextMode值设置为Single,则结果是您的服务一次只能处理一条消息,除非您还将ConcurrencyMode值设置为Multiple。
显然,如果你有多个服务主机,这将无效。