簡體   English   中英

異步調用Web服務(C#)-未命中完整的事件斷點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM