2012-04-12 86 views
0

我在Win 7 IIS上運行一個非常簡單的Web應用程序(Asp.Net MVC3)。 我有一個非常簡單的HTTP GET API,它返回hello world。IIS 7向瀏覽器正確發送GET請求,但爲API請求發送超時異常

呼喚:

http://localhost/helloworld 

返回:

Hello World! 

這工作完全在瀏覽器中。 但是,當我寫它試圖使用Web客戶端來拉這個網址的應用程序,我得到以下錯誤:

{"Unable to read data from the transport connection: The connection was closed."} 

我的代碼如下

WebClient web = new WebClient(); 
var response = web.DownloadString("http://localhost/helloworld"); 

我的IIS設置爲如下 enter image description here

我該看什麼?我一直在這裏待了好幾個小時,但我沒有辦法嘗試!任何幫助將非常感激!

謝謝。

回答

0

我終於明白了問題出在哪裏,而不是IIS特定的問題 - 我傾向於這個問題,結果是我寫的代碼存在問題。

在此添加詳細信息,以免別人遇到類似問題。

我在我的代碼中使用了以下方法將請求的響應作爲JSON對象發送。

private void sendJsonResult(string result) { 
    Response.StatusCode = 200; 
    Response.Headers.Add("Content-Type", "application/json; charset=utf-8"); 
    Response.Flush(); 
    Response.Write(result); 
    Response.End(); 
    Response.Close(); // <-- This is the problem statement 
} 

在周圍挖一點,我發現,我們應該做一個Response.Close()。

對此的更好解釋是here。 一旦我刪除該行,它開始工作完美 - 無論是在我的消費應用程序以及網絡瀏覽器等。

如果您將閱讀上面的鏈接,您將清楚地理解爲什麼我們不應該使用響應.Close() - 所以我不會去描述。今天學到了一件新事物。

0

我懷疑這是因爲Web客戶端不發送一些HTTP頭:

A WebClient instance does not send optional HTTP headers by default. If your request requires an optional header, you must add the header to the Headers collection. For example, to retain queries in the response, you must add a user-agent header. Also, servers may return 500 (Internal Server Error) if the user agent header is missing. http://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.80).aspx

嘗試使用HttpWebRequest的替代。 http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

+0

感謝您的快速響應。我嘗試使用HTTPWebRequest。我的代碼幾乎是這樣的:http://forums.asp.net/post/2930891.aspx 然而,在我做的地方:readStream.ReadToEnd(),我得到同樣的問題(數據不能在連接關閉時下載)。我認爲這是一些IIS特定的事情。 – saurabhj 2012-04-13 06:36:43