2014-02-12 45 views
2

我有一個輔助類,其中有一個方法設置爲接收信息以創建一個HttpWebRequest。目前的方法返回HttpWebResponse如何關閉正在從方法調用返回的HttpWebResponse

HttpWebResponse httpResponse; 
//make request here 
httpResponse = (HttpWebResponse)httpReq.GetResponse(); 
return httpResponse; 

現在因爲連接永遠不會被關閉,這是造成問題。在被調用者中使用using語句或close會在返回之前銷燬對象。正確的做法是這樣的。

using (httpResp = (HttpWebResponse)httpReq.GetResponse()) 
{ 
    return GetDataFromResponse(httpResp); 
} 

但不幸的是有很多的呼叫成期待響應對象回來,然後在調用者自己的方式序列化數據的輔助類。

我試着對幫助者進行調用。

using(HttpWebResponse httpResponseRecieved = WebHelper.MakeRequest(parameters)) 

但這似乎並沒有收到迴應。 httpResponseRecieved是否與返回的對象不同?有沒有更好的解決方案,還是必須重寫方法及其所有呼叫者?

+1

你上次使用'應該關閉響應。是什麼讓你相信它並沒有關閉? –

+0

@JohnSaunders我以前做過一些測試,並且出現錯誤,仍然使用最後的using語句持續存在。我現在正在重做這些測試,看起來正如你所說的那樣工作。 – Adam

回答

0

正如@JohnSaunders指出的那樣,纏繞在調用者上的最後一個using正在關閉響應。

這樣做using(HttpWebResponse httpResponseRecieved = WebHelper.MakeRequest(parameters))畢竟工作。