我有一个WCF服务,它在服务器位置创建许多文件,根据给定的参数对种子文件进行各种计算。问题是,当2个或更多客户端尝试在同一种子文件上进行计算时,它返回错误。原因仅仅是由于多个用户一次进行读/写访问。 所以我想在WCF中创建一个用户请求队列,服务器一次一个地计算它,并将计算的响应返回给用户。问题是我不知道该怎么做。
之前我没有在WCF中实现任何请求队列技术。有谁知道如何在WCF Sevcices中实现它。我不能做线程,因为计算取决于文件I / O,所以一次只处理一个请求只是一个解决方案。
任何教程或视频教程都将受到高度赞赏。
答案 0 :(得分:0)
最后我做到了。 在这里,我发布了我的解决方案给其他可能不熟悉WCF请求排队的用户。 首先,我们需要在WCF主机文件中实现限制设置。 限制可以通过两种方式完成(两种方式都可以):
配置文件中的限制设置如下:
[行为] [serviceBehaviors] [behavior name =“throttlingBehavior”] [serviceThrottling maxConcurrentCalls =“3”maxConcurrentInstances =“3”maxConcurrentSessions =“100”/] [/ behavior] [/ serviceBehaviors] [/行为]
代码中的限制设置
using (ServiceHost host = new ServiceHost(typeof(SimpleService.SimpleService)))
{
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior { MaxConcurrentCalls = 3, MaxConcurrentInstances = 3, MaxConcurrentSessions = 100 };
host.Description.Behaviors.Add(throttlingBehavior);
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服务中获取请求排队。