【问题标题】:User request queue in WCFWCF 中的用户请求队列
【发布时间】:2015-08-06 12:30:32
【问题描述】:

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

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

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

【问题讨论】:

  • 感谢您提出的问题,尽管我已对其进行了标记:要求我们推荐或查找教程的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。

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


【解决方案1】:

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

  1. 配置文件
  2. 代码

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

[行为] [serviceBehaviors] [behavior name="throttlingBehavior"] [serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="3" maxConcurrentSessions="100"/] [/behavior] [/服务行为] [/行为]

或代码中的节流设置

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

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2021-01-13
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多