我正在从Silverlight Windows phone 7应用程序中调用Web服务,如果Web服务可用,该应用程序可以正常工作。如果Web服务不可用,则会捕获未处理的异常,但我似乎无法自己捕获它。我的尝试如下:
//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;
}
但这并没有发现异常,显然GetSuppliersCompleted永远不会被调用,所以我无法抓住它。
然后我想我可以通过检查连接状态(proxy.State)来检测它,但是即使Web服务没有运行,也会返回CommunicationState.Opened。
我有什么想法可以解决这个问题吗?
道歉,如果我错过了什么,但我已经搜索过但没有找到解决方案。
答案 0 :(得分:8)
您应该将捕获物放入ProxyGetSuppliersCompleted
方法中。
尝试访问结果将引发您期望的错误。
或者在ProxyGetSuppliersCompleted
中,您可以测试将包含异常的EventArgs的Error
属性。
答案 1 :(得分:0)
我建议您在解决任何代码安全问题之前检查您是否可以访问Internet。只检查是否有网络连接,如果没有则通知用户。
答案 2 :(得分:-1)
我有完全相同的问题。 行为与处理异常的Desktop-Silverlight不同,WindowsPhone-Silverlight根本不处理连接异常。
我在这里创建了一个主题:http://forums.create.msdn.com/forums/t/69485.aspx
没有人有任何真正的答案。 啊,是的,有一个技巧:你可以手动修改reference.cs以手动捕获异常....但是如果你有很多功能,那就变成了一场噩梦。
也许Microsoft开发人员没有测试所有连接用例,他们忘记实现这个(这是一个很大的)。