2011-12-20 33 views
2

我們正在開發一個應用程序,其中在UI中調用服務(WCF)層和駐留在服務層內的組件異步調用外部Web服務。例如:UI發送說通過上傳一個文件來調用WCF層,如果文件有1000個條目,那麼當前我們在循環(BeginxxxMethod)中異步調用外部服務1000次以進行響應。這是否是正確的方式?第二個問題:可以進行的異步連接的最大數量是多少?我們的技術是ASP.NEt和C#4.0。Asynchronus Webservices線程限制C#

回答

1

兩個建議:

  • 如果你控制了Web服務API添加另一種方法,可以讓你通過所有1000個指定參數和返回所有結果。這是粗俗的和健談的,所以你只能經歷一次過程痛苦。
  • 如果您不控制Web服務API,請拿出一個包裝程序,它可以同時生成n個遠程調用,然後異步調用該包裝程序n次。四處遊玩,直到找到異步呼叫數量與每次異步呼叫的順序遠程呼叫數量之間的最佳平衡。
+0

我們通過實施TPL和PLINQ 10控制最大線程控制的執行... – Saravanan

1

這是否正確嗎?

異步調用通常是完成大批量作業的最佳方式。我認爲你用這種方法看起來不錯。作爲開發人員,通常我們的工作是查看切割新線程的位置不再優化響應時間。 Myles提到使用圍繞服務的包裝。當我一次調用1000次呼叫時,我經常這樣做......調用幾千次異步調用實際上會影響性能(在我的應用程序中),所以我創建了一次將調用分組爲幾百次(異步)的功能,直到所有x - 千電話完成。這給了我兩全其美的好處......我能夠立刻找到異步調用的點數,並給了我最好的性能,並從那裏開始。

至於最大線程數,這取決於資源,但這裏是一個link解釋默認設定......下面我將張貼便於

1023 in Framework 4.0 (32-bit environment) 
32768 in Framework 4.0 (64-bit environment) 
250 per core in Framework 3.5 
25 per core in Framework 2.0 
0

,我們通過實施任務並行庫解決了這個。 下面是僞代碼。

  1. 將文件內容讀入通用列表。
  2. 使用Parallel來處理每個請求,並根據服務器中處理請求的處理器數量設置MaxDOP(並行度)。

感謝