2013-06-23 70 views
0

我想發送請求到Web服務,我不關心響應。該服務在數據庫中執行操作 - 我將從一個簡單的.NET 4.0控制檯應用程序調用它,該應用程序將設置爲按計劃運行。這工作:.NET異步獲取請求 - 不關心響應

using (var client = new WebClient()) { 
    client.UseDefaultCredentials = true; 
    client.DownloadString(uri); 
} 

但阻止線程,直到收到響應。我寧願這樣做:

using (var client = new WebClient()) { 
    client.UseDefaultCredentials = true; 
    client.DownloadStringAsync(uri); 
} 

但這似乎並沒有發送請求(數據庫操作不執行)。有真正簡單的解決方案嗎?

謝謝。

回答

4

是的,異步版本將失敗,因爲您立即處置客戶端。

你既不會出售客戶端:

var client = new WebClient(); 
client.UseDefaultCredentials = true; 
client.DownloadStringAsync(uri); 

...或(更好的)附加一個事件,當它完成處置它:

var client = new WebClient(); 
client.UseDefaultCredentials = true; 
client.DownloadStringCompleted += delegate { client.Dispose(); }; 
client.DownloadStringAsync(uri); 

(你應該檢查是否你需要訂閱任何其他事件以便在失敗時處置它 - 我不記得事件是否在這種情況下仍然被解僱。)

+0

啊是的,我必須讓客戶端保持活着,不要我?我試圖提出請求,讓服務器開始工作,然後斷開連接並讓服務器順其自然,但這不是HTTP的工作方式。 – kad81