代码之家  ›  专栏  ›  技术社区  ›  Fishcake Richard

Windows phone 7,silverlight-调用异步web服务时如何捕获EndpointNotFoundException?

  •  6
  • Fishcake Richard  · 技术社区  · 14 年前

    我正在从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。

    知道我在哪能处理吗?

    抱歉,如果我错过了什么,但我已经搜索,没有找到解决办法。

    3 回复  |  直到 12 年前
        1
  •  8
  •   AnthonyWJones    14 年前

    你应该把钓索放在 ProxyGetSuppliersCompleted 方法。

    试图访问结果将引发预期的错误。

    或者在 ProxyGetSuppliers已完成 你可以测试 Error 包含异常的EventArgs的属性。

        2
  •  0
  •   dand    14 年前

    我建议你先检查一下你是否能上网,然后再启动任何安全代码。只需检查是否有网络连接,如果没有,请通知用户。

        3
  •  -1
  •   Pacome    14 年前

    我也有同样的问题。 这种行为不同于处理异常的桌面Silverlight,也不同于根本不处理连接异常的WindowsPhone Silverlight。

    我在这里创建了一个主题: http://forums.create.msdn.com/forums/t/69485.aspx

    没有人有真正的答案。 啊,是的,有一个技巧:您可以手动修改reference.cs,以便手动捕获异常。。。。但是如果你有很多功能,它就会变成一个噩梦。

    也许微软的开发人员没有测试所有的连接用例,他们忘记了实现这个用例(这是一个很大的用例)。