【问题标题】:Windows phone 7, silverlight - How to catch EndpointNotFoundException when calling async web service?Windows phone 7,silverlight - 调用异步 Web 服务时如何捕获 EndpointNotFoundException?
【发布时间】:2012-08-28 22:33:40
【问题描述】:

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

有什么办法可以解决这个问题吗?

抱歉,如果我遗漏了某些内容,但我已经搜索并没有找到解决方案。

【问题讨论】:

    标签: c# silverlight web-services windows-phone-7


    【解决方案1】:

    你应该把你的捕获放在你的ProxyGetSuppliersCompleted 方法中。

    尝试访问结果将引发您所期望的错误。

    或者,您可以在 ProxyGetSuppliersCompleted 中测试包含异常的 EventArgs 的 Error 属性。

    【讨论】:

    • ProxyGetSuppliersCompleted 没有被调用,因为 EndpointNotFoundException 在由 Visual Studio 生成的 Reference.cs 中被捕获为“未处理”。
    • 对不起,我误会了。因为在调试 Visual Studio 时,Reference.cs 我没有继续。如果我继续执行(或不调试)错误确实在 ProxyGetSuppliersCompleted 中被捕获。干杯。
    • 感谢您提供详细的鱼饼
    【解决方案2】:

    我建议在触发任何代码和平之前检查您是否可以访问 Internet。只需检查是否有网络连接,如果没有则通知用户。

    【讨论】:

    • 绝对值得做,但它不会解决我的问题。
    【解决方案3】:

    我也有同样的问题。 该行为不同于处理异常的 Desktop-Silverlight,与根本不处理连接异常的 WindowsPhone-Silverlight。

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

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

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

    【讨论】:

    • 您可以在异步方法的处理程序中捕获错误(在我的示例中为 ProxyGetSuppliersCompleted)。这很好用,你还有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2011-04-24
    • 2017-07-03
    相关资源
    最近更新 更多