[英]Calling web service asynchronously (C#) - completed event breakpoint not hit
無法深入探討這一問題,顯然這很愚蠢,有人可以幫忙嗎?
我正在使用C#控制台應用程序異步調用Web服務,並且'completed'事件中的斷點永遠不會發生。
這是示例代碼,非常簡單:
public static void CallWebservice()
{
try
{
ServiceReference1.GlobalWeatherSoapClient proxy = new GlobalWeatherSoapClient();
proxy.GetCitiesByCountryCompleted += proxy_GetCitiesByCountryCompleted;
proxy.GetCitiesByCountryAsync("France");
}
catch (FaultException faultException)
{
var error = faultException.Message;
}
}
static void proxy_GetCitiesByCountryCompleted(object sender, GetCitiesByCountryCompletedEventArgs e)
{
//Do something here
throw new NotImplementedException();
}
所以斷點就行了
throw new NotImplementedException();
從未被擊中。
但是,如果在實際的調用之后添加了另一行:
System.Threading.Thread.Sleep(5000);
..斷點現在可以確定了。 誰能解釋這是怎么回事? 顯然與線程和調試器有關,但我不知道該怎么辦?
這是因為proxy
超出了范圍,因此被清理了(因此丟失了回調)。
因此,您需要將代理移出呼叫,以便其壽命由您控制:
private ServiceReference1.GlobalWeatherSoapClient _proxy;
public void CallWebservice()
{
try
{
_proxy = new GlobalWeatherSoapClient();
_proxy.GetCitiesByCountryCompleted += proxy_GetCitiesByCountryCompleted;
_proxy.GetCitiesByCountryAsync("France");
}
catch (FaultException faultException)
{
var error = faultException.Message;
}
}
public void proxy_GetCitiesByCountryCompleted(object sender, GetCitiesByCountryCompletedEventArgs e)
{
//Do something here
throw new NotImplementedException();
}
這不是一個完美的例子,因為沒有看到其余的代碼,我無法告訴您在哪里實例化proxy
。 不是在CallWebservice
而是在構造函數中,但是希望您能理解!
您應該等待對proxy.GetCitiesByCountryAsync("France")
的調用,否則您將在函數完成之前退出try塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.