WCF 中的用户请求队列

User request queue in WCF

我有一个 WCF 服务,它在服务器位置创建许多文件,根据给定的参数对种子文件进行各种计算。问题是,当 2 个或更多客户端尝试对同一个种子文件进行计算时,它会返回错误。原因很简单,因为 read/write 多个用户同时访问。 所以我想在 WCF 中创建一个用户请求队列,服务器从那里一次计算一个,并 returns 计算出对用户的响应。问题是我不知道该怎么做。

我以前没有在 WCF 中实现任何请求队列技术。有谁知道如何在 WCF Sevcices 中实现这个。我无法进行线程化,因为计算取决于文件 I/O 因此一次处理一个请求目前只是一种解决方案。

任何教程或视频教程将不胜感激。

我终于做到了。 在这里,我为可能不熟悉 WCF 请求队列的其他用户发布了我的解决方案。 首先,我们需要在 WCF 主机文件中实现节流设置。 节流可以通过两种方式完成(任何一种方式都可以):

  1. 配置文件
  2. 代码

配置文件中的节流设置如下:

[behaviors] [serviceBehaviors] [behavior name="throttlingBehavior"] [serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="3" maxConcurrentSessions="100"/] [/behavior] [/serviceBehaviors] [/behaviors]

或者代码中的节流设置

using (ServiceHost host = new ServiceHost(typeof(SimpleService.SimpleS­ervice)))
{ 
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior { MaxConcurrentCalls = 3, MaxConcurrentInstances = 3, MaxConcurrentSessions = 100 }; 
host.Description.Behaviors.Add(throttlin­gBehavior); 
host.Open(); 
Console.WriteLine("Host started @ " + DateTime.Now.ToString()); 
Console.ReadLine();
}

使用上述限制设置最多处理 3 个并发调用。除了 maxConcurrentCalls 属性,maxConcurrentInstances 和 maxConcurrentSessions 也可能影响并发处理的呼叫数。

现在定义节流行为后,我们需要在服务合约中定义并发模式如下:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple)]
public class Service:IService
{...

有了这些设置,我们就可以很容易地得到 WCF 服务中的请求排队。