2011-05-13 43 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

相關問題