2

我正在構建需要調用大量外部Web服務的Azure Web角色。Azure Web角色 - 最大出站http連接

我記得ASP.Net 1.1有一個默認的最大連接數限制爲2,如果您的應用程序需要更多(這是很低的,讓我們誠實),你可以調整。在ASP.Net 2.0上,我相信他們提出了這個建議,是核心數量的12倍。

Azure Web Roles上的限制及其調整方法有哪些?我將同時有數百或數千個併發出站請求。這是否意味着我需要更大的實例(更多核心),或者我可以通過使用更多「超小型」實例並正確配置它們(即使這意味着每個服務器有12個實例)來實現此目的?

謝謝。

回答

2

實例的大小將僅確定將爲您的實例保留的帶寬(XS是5 Mbps,更多信息here)。什麼你需要做的僅僅是DefaultConnectionLimit改爲超過2:

<system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="12"/> 
    </connectionManagement> 
    </system.net> 

這一點,如果你想允許這個Web應用程序添加到您的web.config。以下內容添加到您的WebRole.cs,如果你想在開始您的實例,例如之前調用服務:

public override bool OnStart() 
    { 
     ServicePointManager.DefaultConnectionLimit = 12; 
     return base.OnStart(); 
    } 

請記住,即使請求進行排隊,你會得到,如果你一個更好的整體性能以異步方式調用Web服務。這裏是一個非常基本的例子(假設你調用一個簡單的REST服務,WCF客戶端代理更好地支持異步請求):

<%@ Page Async="true" ... %> 

public partial class AsyncPage : System.Web.UI.Page 
{ 
    private WebRequest req; 

    void Page_Load (object sender, EventArgs e) 
    { 
     AddOnPreRenderCompleteAsync (
      new BeginEventHandler(BeginWebServiceCall), 
      new EndEventHandler (EndWebServiceCall) 
     ); 
    } 

    IAsyncResult BeginWebServiceCall (object sender, EventArgs e, 
     AsyncCallback cb, object state) 
    { 
     req = WebRequest.Create("http://some.webs.service/rest/api"); 
     return req.BeginGetResponse (cb, state); 
    } 
    void EndWebServiceCall (IAsyncResult ar) 
    { 
     using (var response = req.EndGetResponse(ar)) 
     { 
      using var reader = 
       new StreamReader(response.GetResponseStream())) 
      { 
       var text = reader.ReadToEnd(); 
     ... 
      } 
     } 
    } 
} 
+0

非常感謝!您引用的頁面還顯示了我們在每個實例大小上獲得的核心數量。在某些情況下,如果出站連接太多,XS是否會不堪重負?例如,具有2個內核的Medium可能在過去被配置爲maxconnection =「24」。這不是對Azure的建議嗎?我想知道有多少XS可以站立。 –

+0

我建議你從一個XS實例上開始12(因爲你會得到一個專用的核心,所以Small會更好),並且做一些壓力測試來看看它是如何響應的。但請記住,如果使用異步請求調用Web服務,我們會得到更好的結果(我更新了我的答案)。 –

+0

哇!這是很棒的東西。謝謝。 –