C# 无法在try-catch块中捕获Webservice调用方法
我正在开发一个WP8应用程序。我在out系统上创建了一个web服务,然后在我的应用程序中调用这些web服务方法: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块,但它没有,我得到以下异常:
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客户端代理未定义此方法,则您可以自己定义:
我尝试了你的建议,但在控件进入事件处理程序之前,同一个未处理的异常(我在问题中提到)停止了执行并使应用程序崩溃。我想要的是,我应该能够保护应用程序不受这种情况的影响,而是弹出一些消息,例如服务器当前不可用。是否有帮助?我尝试了你的建议,但在控件进入事件处理程序之前,相同的未处理异常(我在问题中提到)停止执行并使应用程序崩溃。我想要的是,我应该能够保护应用程序免受此类情况的影响,并弹出一些消息,例如服务器当前不可用。是否有帮助?