2016-01-21 87 views
2

我在多線程環境中調用Web服務。由於操作超時或請求不好,我的很多通話都會失敗,但是如果以線性方式進行通話,則沒有任何通話會失敗,這意味着調用具有多個線程的webservice時會出現問題。經過大量的分析,我發現併發連接的限制導致了這些異常,所以我通過添加下面的代碼來修復它。缺點增加ServicePointManager.DefaultConnectionLimit

ServicePointManager.DefaultConnectionLimit = 2 * _ThreadCount; 

我不知道是增加這個限制的可能缺點。默認情況下,連接限制爲2.如果有人知道任何缺點,請讓我知道。

回答

1

MSDN說:

更改DefaultConnectionLimit財產對現有 的ServicePoint對象沒有影響;它僅影響在更改後初始化的ServicePoint對象 。如果此屬性的值不是 已直接或通過配置設置,則該值默認 爲常量DefaultPersistentConnectionLimit。

到DefaultConnectionLimit屬性的任何變化都影響HTTP 1.0和HTTP 1.1連接。無法單獨更改HTTP 1.0和HTTP 1.1協議的連接限制。當 服務器環境(ASP.NET)DefaultConnectionLimit默認使用 更高的連接數,這是10

+0

MSDN還指出,默認值爲MaxValue的,但是當我調試我看到默認值爲2 – Viru

+0

@Viru: - 是的,它是默認設置爲MaxValue的。你確定以前沒有改變過嗎? –

+0

在我的應用程序或配置無論在哪裏,我設置此值,但如果我正確地undertstand它,它是系統級配置,有可能是在machine.config中的配置,我沒有檢查....反正,我更感興趣在尋找任何可能的弊端 – Viru

1

不,不應該有比你的AppDomain會消耗更多的資源以外的任何缺點。但在你的情況下,這是微不足道的。

事實上,它實際上可以幫助您使用更少的資源(內存),因爲掛起的請求在ServicePoint內部排隊。讀到這裏瞭解更多信息:Big size of ServicePoint object after several hours sending HTTP request in parallel

讓我給你的圖片....我有大約46K的任務,這些任務都在批100(每個任務將調用Web服務),所以我跑了有100個線程調用webserivce同時。它仍然微不足道?或者它會對我的情況產生一些影響?

它當然會產生影響。但影響取決於許多因素。服務點是每個主機。

如果您的任務主要針對不同的主機,請將DefaultConnectionLimit增加到更大的值(當前執行批次中的預期任務數)。

如果你主要是針對不同的主機做請求,你的問題的限制工作正常。

關於資源的使用情況,只要您的服務器並不是非常忙於其他應用程序就可能。

+0

讓我給你的圖片....我有大約46K的任務,這些任務都在批100跑(每個任務將調用Web服務),所以我有100個線程同時調用webserivce。它仍然微不足道?或者它會對我的情況產生一些影響? – Viru

+0

@Viru:閱讀我的更新。 – jgauffin

+0

你的意思是在這種情況下說同一個主機? 如果你的任務大多是針對不同的主機上,增加DefaultConnectionLimit到一個較大的值(預計在當前執行批處理任務數)。 如果你是做多是針對不同主機的請求,在你的問題的極限工作正常。 – Viru