C# 无法在try-catch块中捕获Webservice调用方法

C# 无法在try-catch块中捕获Webservice调用方法,c#,web-services,windows-phone-8,async-await,C#,Web Services,Windows Phone 8,Async Await,我正在开发一个WP8应用程序。我在out系统上创建了一个web服务,然后在我的应用程序中调用这些web服务方法: ServiceReference1.WebServiceClient ws = new WebServiceClient(); try { ws.FetchInboxAsync(EmailId); } catch(Exception e) { MessageBox.Show(e.Message); } 现在,如果服务器关闭,我希望控件进入catch块,但它没有,我得到以下异常:

我正在开发一个WP8应用程序。我在out系统上创建了一个web服务,然后在我的应用程序中调用这些web服务方法:

ServiceReference1.WebServiceClient ws = new WebServiceClient();
try
{
 ws.FetchInboxAsync(EmailId);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
现在,如果服务器关闭,我希望控件进入catch块,但它没有,我得到以下异常:

“System.ServiceModel.CommunicationException”类型的异常 发生在System.ServiceModel.ni.dll中,但未在用户中处理 代码

我知道web服务调用方法是异步的,所以它的异常不会在try-catch中被捕获。在论坛上,人们建议使用wait关键字。但是当我写作的时候

等待ws.FetchInboxAsync(EmailId)

我得到一个错误:不能等待无效


我尝试了答案中提到的一些内容,但仍然得到了相同的异常

您可以订阅FetchInboxCompleted事件:

ServiceReference1.WebServiceClient ws = new WebServiceClient();
ws.FetchInboxCompleted += new EventHandler<ServiceReference1.FetchInboxCompletedEventArgs>(c_FetchInboxCompleted);
ws.FetchInboxAsync(EmailId);

您可以订阅FetchInboxCompleted事件:

ServiceReference1.WebServiceClient ws = new WebServiceClient();
ws.FetchInboxCompleted += new EventHandler<ServiceReference1.FetchInboxCompletedEventArgs>(c_FetchInboxCompleted);
ws.FetchInboxAsync(EmailId);

如果自动生成的WCF客户端代理支持它,您应该能够等待以
taskancy
结尾的方法:

await ws.FetchInboxTaskAsync(EmailId);

如果自动生成的WCF客户端代理未定义此方法,则您可以自己定义:


如果自动生成的WCF客户端代理支持它,您应该能够等待以
taskancy
结尾的方法:

await ws.FetchInboxTaskAsync(EmailId);

如果自动生成的WCF客户端代理未定义此方法,则您可以自己定义:


我尝试了你的建议,但在控件进入事件处理程序之前,同一个未处理的异常(我在问题中提到)停止了执行并使应用程序崩溃。我想要的是,我应该能够保护应用程序不受这种情况的影响,而是弹出一些消息,例如服务器当前不可用。是否有帮助?我尝试了你的建议,但在控件进入事件处理程序之前,相同的未处理异常(我在问题中提到)停止执行并使应用程序崩溃。我想要的是,我应该能够保护应用程序免受此类情况的影响,并弹出一些消息,例如服务器当前不可用。是否有帮助?