C# WindowsPhone7,silverlight-调用异步web服务时如何捕获EndpointNotFoundException?
我正在从Silverlight Windows phone 7应用程序中调用一个web服务,如果web服务可用,该应用程序可以正常工作。如果web服务不可用,则会捕获未处理的异常,但我自己似乎无法捕获它。我的尝试如下:C# WindowsPhone7,silverlight-调用异步web服务时如何捕获EndpointNotFoundException?,c#,silverlight,web-services,windows-phone-7,C#,Silverlight,Web Services,Windows Phone 7,我正在从Silverlight Windows phone 7应用程序中调用一个web服务,如果web服务可用,该应用程序可以正常工作。如果web服务不可用,则会捕获未处理的异常,但我自己似乎无法捕获它。我的尝试如下: //Get list of providers from Webservice RSAServiceClient proxy = new RSAServiceClient(); proxy.GetSuppliersCompl
//Get list of providers from Webservice
RSAServiceClient proxy = new RSAServiceClient();
proxy.GetSuppliersCompleted += new System.EventHandler<GetSuppliersCompletedEventArgs>(ProxyGetSuppliersCompleted);
try
{
proxy.GetSuppliersAsync();
}
catch (EndpointNotFoundException)
{
//TODO: Handle webserice not being available
}
catch (Exception)
{
throw;
}
//从Webservice获取提供程序列表
RSAServiceClient proxy=新的RSAServiceClient();
proxy.GetSuppliersCompleted+=新系统.EventHandler(ProxyGetSuppliersCompleted);
尝试
{
proxy.GetSuppliersAsync();
}
捕获(EndpointNotFoundException)
{
//TODO:处理Web服务器不可用
}
捕获(例外)
{
投掷;
}
但这并没有捕获异常,显然GetSuppliersCompleted从未被调用,所以我无法在那里捕获它
然后,我想我可以通过检查连接状态(proxy.state)来检测它,但是尽管web服务没有运行,但这会返回CommunicationState.Opened
你知道我在哪里可以处理这个吗
如果我错过了什么,但我已搜索但未找到解决方案,请道歉。您应该将捕获内容放在您的
ProxyGetSuppliersCompleted
方法中
尝试访问结果将抛出您预期的错误
或者,在
ProxyGetSuppliersCompleted
中,您可以测试包含异常的EventArgs的Error
属性。我建议在启动任何代码前检查您是否可以访问Internet。只要检查是否有网络连接,如果没有,就通知用户。我也有同样的问题。
这种行为不同于处理异常的Desktop Silverlight,也不同于根本不处理连接异常的WindowsPhone Silverlight
我在这里创建了一个主题:
没有人有真正的答案。
啊,是的,有一个技巧:您可以手动修改reference.cs以手动捕获异常。。。。但是如果你有很多功能,那就变成了一场噩梦
可能Microsoft开发人员没有测试所有的连接用例,他们忘记了实现这个用例(这是一个大的用例)。ProxyGetSuppliersCompleted没有被调用,因为EndpointNotFoundException在Visual Studio生成的Reference.cs中被捕获为“未处理”。抱歉,我误解了。因为在调试Visual Studio时,我没有继续使用Reference.cs。如果我继续执行(或不进行调试),ProxyGetSuppliersCompleted中确实会捕获错误。干杯。感谢您提供的详细信息。您可以捕获异步方法处理程序中的错误(在我的示例ProxyGetSuppliersCompleted中)。这很好,你还有什么问题?当然值得做,但它不会解决我的问题。