從asp.net web應用程序調用web服務時,爲避免爲每個webservice調用創建新的代理,我將代理存儲爲dictonary。因此,當對web服務進行調用時,將根據傳遞給工廠方法的密鑰返回web服務代理的實例。如果已經創建了相應密鑰的代理,則返回該代理。否則,它爲密鑰創建一個代理並返回代理。如何在調用不返回任何響應的webservice調用時去除對HttpWebRequests的引用?
這一切工作正常,除非由於某種原因實際的web服務「失敗」,並不會返回任何響應。如果發生這種情況,它在我的情況下會非常頻繁地創建一個System.Net.HttpWebRequest,它不會被GC收集。原因是,HttpWebRequest是HttpWebRequest.GetResponse()中的一個局部變量,它仍在執行中(因爲它正在等待永遠不會到來的響應)。因此,存在對HttpWebRequest的引用將保持對象的活性。
解決此問題的一種方法是將調用放入Using塊中的Web服務,從而在調用完成後處理該對象。這樣,對HttpWebRequest的引用將被切斷,以便HttpWebRequest可以被GC收集。但是,通過部署代理,整個存儲代理的想法是避免爲每個呼叫故障創建一個代理。
因此,我的問題是,有沒有人有任何想法我可以做什麼來解決有沒有從Web服務響應時引用HttpWebRequests的問題?
Thanx提前!
一些僞代碼來解釋存儲在dictonary的代理的概念:
public Proxy GetProxy(String key) {
if(!proxies.ContainsKey(key)) {
proxies[key] = new Proxy();
}
return proxies[key];
}
public Object GetObject(String key) {
Object object =
this.GetProxy(key).GetObject();
return object;
}
謝謝。這就是我最終做的。 – 2011-03-06 17:11:32