[英]How to make WCF Service take only one call at a time
我们有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 =单
是否存在InstanceContextMode和COncurrency的任何组合,它们可以将我的服务更改为一次仅接受一个请求,我的意思是,如果客户端代理A调用了OPerationA,并且该服务正在处理该请求,并且客户端代理B是否尝试调用OperationB(或任何其他操作),则应将其阻止,直到第一个请求完成。
谢谢
将InstanceContextMode更改为Single应该足够了。 从MSDN文档在这里 :
ConcurrencyMode = Single :服务实例是单线程的,并且不接受可重入的调用。 如果InstanceContextMode属性为Single,并且在实例为呼叫提供服务时有其他消息到达,则这些消息必须等待,直到该服务可用或消息超时为止。
来自http://msdn.microsoft.com/zh-cn/library/system.servicemodel.instancecontextmode%28v=vs.110%29.aspx
如果InstanceContextMode值设置为Single,则结果是您的服务一次只能处理一条消息,除非您还将ConcurrencyMode值也设置为Multiple。
显然,如果您有多个服务主机,则无法使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.