簡體   English   中英

請求Azure Web角色的方法時,C#HttpWebRequest.GetResponse()會掛起

[英]C# HttpWebRequest.GetResponse() hangs when requesting a method of Azure web role

我正在編寫代碼以在windows azure中向我的Web服務發送請求,結果發現我無法在超時之前得到響應。 令人困惑的是,我確信我服務中的所有內容都已完成,但響應卻沒有回來。

我的服務代碼如下所示:

public virtual JsonResult ServiceMethod()
{
    // 1. do the work
    // 2. write something to database

    return Json(result, JsonRequestBehavior.AllowGet);
}

我的客戶端代碼如下所示:

HttpWebRequest webRequest = WebRequest.Create(new Uri(httpAddress)) as HttpWebRequest;
webRequest.Timeout = 1000 * 1000;
webRequest.ServicePoint.ConnectionLeaseTimeout = 40 * 60 * 1000;
webRequest.ServicePoint.MaxIdleTime = 40 * 60 * 1000;
webRequest.ServicePoint.SetTcpKeepAlive(true, 50 * 1000, 1000);
webRequest.Method = "GET";


using (HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse)
{
    // handle the response
}

現在我很確定我的服務中的代碼已經完成,因為我試圖寫一些東西到數據庫而且發生了。 我還檢查了托管服務的虛擬機上的iis日志,並顯示返回了http 200。 但是我的客戶端代碼中的調用GetResponse()掛起,直到達到1000秒超時。

更新

我的Web API有一個參數會影響該方法運行的時間。(為簡單起見,我沒有在上面的代碼中顯示它)。 如果服務方法運行足夠長的時間(如6或7分鍾),則會出現掛起問題。 否則,Web響應可以成功返回。 所以我想在超時設置中可能存在一些問題。 但是HttpWebRequest及其基類中有幾個超時屬性,我不知道它們的組合可以導致或解決這個問題。

問題是什么的任何想法? 非常感謝。

從你的代碼開始,既然你從你的行動中返回了JsonResult ,那么你似乎擁有一個RESTful架構。 調試RESTful架構的方法之一是使用瀏覽器,特別是在HTTP方法為GET的情況下。

您只需在瀏覽器的地址欄中復制/粘貼您的網址,即可查看是否有任何回復。 如果您看到結果,那么您的客戶端代碼就是問題,否則,問題出在服務器端(azure服務器)。

為了監控HTTP流量,一個好的實用工具是Fiddler

在Windows Azure模擬器中本地運行項目。 然后,檢查計算模擬器的輸出。 它應該顯示未處理的例外情況。

似乎對外部服務的調用失敗,並且異常處理不當。 我們之前遇到過類似的情況,甚至會導致IIS工作進程崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM