Web服务不使用代理类处理来自同一应用程序的多个同时请求

我有一个应用程序调度多个任务,调用不同的Web服务,一些相同的Web服务,但不同的方法。 每个任务都在一个时间间隔内执行,每个任务都在自己的线程中运行。 为了获得对webservice的引用,我有一个wsdl.exe生成的代理类,它在每个任务中实例化并且总是被处理掉。 但是,在运行应用程序时,任务实际上是在服务请求中等待彼此,Web服务在从任务x完成处理请求之前没有处理来自任务y的服务请求(我可以看到这是因为来自任务x的服务调用可能需要5分钟,任务y 100毫秒,但是如果y在x运行时开始,则在x完成后100毫秒完成)。

这是来自任务的代码(在自己的线程内运行):

public class TaskX : TaskWrapper { public TaskX(Guid id, string name, EventQueue eventqueue) : base(id, name, eventqueue) { } protected override void DoTask() { try { var factory = new ServiceReferenceFactory(); using (var reference = factory.GetServiceReference()) { bool result; bool isSpecified; reference.Run(out result, out isSpecified); } } } } 

这是上面提到的工厂方法的代码:

 public ProxyClassService GetServiceReference() { var refer = new ProxyClassServiceNamespace.ProxyClassService(); refer.Timeout = 1000 * 60 * 60; return refer; } 

有谁知道我为什么会遇到这种行为?

编辑:

在我将[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]添加到我的wcf服务的实现之后,这里有一些来自任务的日志。 我没有对visual studio 2008中创建的wcf服务进行任何配置更改。

15:02 – 任务开始:TaskXWithInternalException

15:02 – 任务开始:TaskYQuickOne

15:02 – 任务结束:TaskYQuickOne任务已用时间:00:00:00.1214762

15:02 – 任务开始:TaskZSlowOne

15:03 – 任务开始:TaskXWithInternalException

15:03 – 任务开始:TaskYQuickOne

15:05 – 任务结束:TaskZSlowOne任务已用时间:00:03:11.6510947

15:05 – 任务结束:TaskYQuickOne任务已用时间:00:02:09.7311905

15:06 – 任务开始:TaskYQuickOne

15:06 – 任务结束:TaskYQuickOne任务已用时间:00:00:00.0546980

这可能与您的WCF服务上的并发/实例设置有关。

如果所有调用都转到同一个服务实例(例如InstanceContextMode = PerSession or Single ),那么通常需要确保已将ConcurrencyMode设置为Multiple ,否则将以序列化方式处理调用。

您能告诉我们更多关于如何设置WCF服务(而不是客户端)的信息吗?