2011-05-13 40 views
2

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

这是一个任务的代码(自己的线程中运行):

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年

15:02创建了一个WCF服务 - 任务开始: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

+0

问题:在服务器端是否有任务x和y消耗的数据库?也许这些调用实际上会触发服务器,但是一些数据库端锁定会阻止它们同时执行。 – Adi 2011-05-13 10:52:47

+0

是的,这些任务在做什么?如果您使用的是PerCall实例化,那么您的阻塞中不可能包含WCF(我已经可以从日志中看到这些调用是并发的,所以这不是问题)。 – Schneider 2011-05-13 13:27:16

回答

2

这可能与您的WCF服务上的concurrency/instancing settings有关。

如果所有呼叫都将相同的服务实例(例如InstanceContextMode = PerSession or Single),那么通常你需要确保你已经设置了ConcurrencyModeMultiple,否则调用在一个序列化的方式提供服务。

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

+0

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 – user752083 2011-05-13 13:14:06

相关问题