C# WCF中的用户请求队列

C# WCF中的用户请求队列,c#,wcf,message-queue,wcfserviceclient,request-queueing,C#,Wcf,Message Queue,Wcfserviceclient,Request Queueing,我有一个WCF服务,它在服务器位置创建大量文件,根据给定的参数对种子文件进行各种计算。问题是,当两个或多个客户端试图对同一种子文件进行计算时,它返回了错误。原因很简单,因为一次有多个用户进行读/写访问。 所以我想在WCF中创建一个用户请求队列,服务器从中一次计算一个请求队列,并将计算出的响应返回给用户。问题是我不知道怎么做 我以前没有在WCF中实现任何请求队列技术。有人知道如何在WCF服务中实现这一点吗。我无法执行线程处理,因为计算取决于文件I/O,因此一次处理一个请求是目前唯一的解决方案 任何

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

我以前没有在WCF中实现任何请求队列技术。有人知道如何在WCF服务中实现这一点吗。我无法执行线程处理,因为计算取决于文件I/O,因此一次处理一个请求是目前唯一的解决方案

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

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

  • 配置文件
  • 代码
  • 配置文件中的节流设置如下所示:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple)]
    public class Service:IService
    {...
    
    [行为] [serviceBehaviors][behavior name=“throttlingBehavior”][serviceThrottling maxConcurrentCalls=“3”maxConcurrentInstances=“3”maxConcurrentSessions=“100”/ [/serviceBehaviors] [/行为]

    或代码中的限制设置

    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服务中获得请求队列。

    感谢您提出的问题,尽管我已经标记了它:要求我们推荐或查找教程的问题因堆栈溢出而脱离主题,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所做的工作。