WCF

时间:2015-05-25 04:40:25

标签: c# wcf message-queue wcfserviceclient request-queueing

我有一个WCF服务,它在服务器位置创建许多文件,根据给定的参数对种子文件进行各种计算。问题是,当2个或更多客户端尝试在同一种子文件上进行计算时,它返回错误。原因仅仅是由于多个用户一次进行读/写访问。 所以我想在WCF中创建一个用户请求队列,服务器一次一个地计算它,并将计算的响应返回给用户。问题是我不知道该怎么做。

之前我没有在WCF中实现任何请求队列技术。有谁知道如何在WCF Sevcices中实现它。我不能做线程,因为计算取决于文件I / O,所以一次只处理一个请求只是一个解决方案。

任何教程或视频教程都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

最后我做到了。 在这里,我发布了我的解决方案给其他可能不熟悉WCF请求排队的用户。 首先,我们需要在WCF主机文件中实现限制设置。 限制可以通过两种方式完成(两种方式都可以):

  1. 配置文件
  2. 配置文件中的限制设置如下:

      

    [行为]   [serviceBehaviors] [behavior name =“throttlingBehavior”] [serviceThrottling maxConcurrentCalls =“3”maxConcurrentInstances =“3”maxConcurrentSessions =“100”/] [/ behavior]   [/ 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服务中获取请求排队。