2008-10-23 38 views
3

我讀過Silverlight 2.0在設計時強制與Web服務器通信的異步模型。我沒有機會嘗試Silverlight,但我假設它使用線程池來管理.NET Framework中的線程。

現在,由於某些瀏覽器(最着名的是Internet Explorer)具有可以在Web服務器上創建的最多兩個併發HTTP連接的硬編碼限制,如果我從Silverlight發出一堆異步請求,會發生什麼情況?

Silverlight是否在Web瀏覽器中繞過此限制並打開儘可能多的HTTP連接,因爲有可用的線程,或者異步請求排隊並等待兩個連接中的一個變爲可用?Silverlight中的異步Web服務器調用和最大HTTP連接

回答

3

在IE中(沒有測試過其他人)Silverlight一次只能連接2個連接。

Silverlight中的行爲是根本不提出請求。所以如果你連續做5個異步Web服務請求,前2個將會發生,其他3個不會。沒有拋出異常,我已經看到...

小提琴手是一個很大的幫助這裏:)

+0

IE和silverlight的版本是什麼? – 2009-08-19 11:17:59

-2

首先Machine.config文件將不會被用作Silverlight控件提到的是沙箱與它自己版本的CoreCLR的。

我相信Silverlight控件實際上使用底層瀏覽器來製作異步HTTP請求。考慮到Silverlight控件無法訪問SOAP錯誤信息,這很可能是這種情況,因爲SOAP規範要求服務器返回HTTP 500響應代碼,並且Silverlight控件不能從託管控件的瀏覽器中獲取。

此信息here用於確認此事。

關於併發HTTP連接的限制,我相信IE5和更高版本將基於HTTP協議版本(HTTP/1.0限制爲4個連接和HTTP/1.1到3連接)限制到同一站點的連接數。大多數情況下,Web服務器將連接數限制爲每個客戶端2個,排隊或丟棄其餘部分。

+1

關閉。舊版瀏覽器在HTTP/1.1上限制爲4個HTTP/1.0和2。 – EricLaw 2010-01-19 00:49:58

1

火狐也僅限於兩種連接方式,除了IE如前所述。

請注意,限制是按每個主機名。

如果您將條目添加到主機文件或使用dns別名,則可以獲得更多連接。例如,在測試中,將「127.0.0.1 test1」這樣的行添加到主機文件中,然後可以打開兩個連接到http://localhost和另外兩個連接到http://test1

2

爲您的客戶端創建消息傳遞管理器界面。任何傳出的請求都會發布到該經理處理的隊列中。它將連續處理排隊的消息(即,當調用發送到服務器的最後一個消息的回調時,可以安全地繼續處理下一個排隊的消息)。

您可以通過向服務器保持開放的Comet連接來消耗其他連接資源。服務器將通過這個Comet連接將任何返回消息推送到客戶端。您需要使用可嵌入作爲即將發送消息的媒體資源的唯一編號來標記即將發佈的消息,以便將結果與請求相關聯。消息傳遞管理器會將結果消息分發給適當的處理程序以獲得該結果。

本質上,您最終將使用兩個連接資源來建立雙向消息。但是,客戶端上請求者的數量沒有人爲的限制(儘管請求會被串行傳輸到服務器)。但是,發送操作總是很快,因爲您不必等待任何結果的計算 - 您只需將消息可靠地傳送到服務器並返回即可。結果會在另一個Comet連接上異步返回。

我們做沿着這些線路與我們的Flex客戶端應用程序結合,以土坯BlazeDS在我們的Tomcat Web服務器上運行的東西:

A Flex-based asynchronous stack