WCF 中的用户请求队列
User request queue in WCF
我有一个 WCF 服务,它在服务器位置创建许多文件,根据给定的参数对种子文件进行各种计算。问题是,当 2 个或更多客户端尝试对同一个种子文件进行计算时,它会返回错误。原因很简单,因为 read/write 多个用户同时访问。
所以我想在 WCF 中创建一个用户请求队列,服务器从那里一次计算一个,并 returns 计算出对用户的响应。问题是我不知道该怎么做。
我以前没有在 WCF 中实现任何请求队列技术。有谁知道如何在 WCF Sevcices 中实现这个。我无法进行线程化,因为计算取决于文件 I/O 因此一次处理一个请求目前只是一种解决方案。
任何教程或视频教程将不胜感激。
我终于做到了。
在这里,我为可能不熟悉 WCF 请求队列的其他用户发布了我的解决方案。
首先,我们需要在 WCF 主机文件中实现节流设置。
节流可以通过两种方式完成(任何一种方式都可以):
- 配置文件
- 代码
配置文件中的节流设置如下:
[behaviors]
[serviceBehaviors] [behavior name="throttlingBehavior"] [serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="3" maxConcurrentSessions="100"/] [/behavior]
[/serviceBehaviors]
[/behaviors]
或者代码中的节流设置
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 服务中的请求排队。
我有一个 WCF 服务,它在服务器位置创建许多文件,根据给定的参数对种子文件进行各种计算。问题是,当 2 个或更多客户端尝试对同一个种子文件进行计算时,它会返回错误。原因很简单,因为 read/write 多个用户同时访问。 所以我想在 WCF 中创建一个用户请求队列,服务器从那里一次计算一个,并 returns 计算出对用户的响应。问题是我不知道该怎么做。
我以前没有在 WCF 中实现任何请求队列技术。有谁知道如何在 WCF Sevcices 中实现这个。我无法进行线程化,因为计算取决于文件 I/O 因此一次处理一个请求目前只是一种解决方案。
任何教程或视频教程将不胜感激。
我终于做到了。 在这里,我为可能不熟悉 WCF 请求队列的其他用户发布了我的解决方案。 首先,我们需要在 WCF 主机文件中实现节流设置。 节流可以通过两种方式完成(任何一种方式都可以):
- 配置文件
- 代码
配置文件中的节流设置如下:
[behaviors] [serviceBehaviors] [behavior name="throttlingBehavior"] [serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="3" maxConcurrentSessions="100"/] [/behavior] [/serviceBehaviors] [/behaviors]
或者代码中的节流设置
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 服务中的请求排队。