【问题标题】:Exception handling in Event-Driven Async WCF service call事件驱动的异步 WCF 服务调用中的异常处理
【发布时间】:2015-01-08 13:15:44
【问题描述】:

问题涉及使用 WCF 服务连接到数据库并从数据库中检索信息的 Windows Phone 8.1 SL 应用程序。我们如何处理数据库的通信错误异常?假设服务已开启,并且我们可以访问它,但该服务由于某种原因无权访问数据库。这样的错误处理是否应该在 WCF 一方?如果是,那么应该如何将其写入用户友好的显示信息,例如消息框?

第二件事:我决定自己模拟无法访问 WCF 服务的情况。为此,我刚刚将 IP 地址更改为服务。我想从应用程序端处理这个异常,但我总是在 Visual Studio 中得到错误异常。任何建议错误类负责处理与服务的通信错误?

我正在尝试这样的事情:

public partial class Kurs : PhoneApplicationPage
{
    CenyMiejscaService.CenyMiejscaServiceClient cenyMiejscaUsluga;
    Dictionary<DateTime, double> kurs;


    public Kurs()
    {
        InitializeComponent();

        kurs = new Dictionary<DateTime, double>();

        try
        {
            cenyMiejscaUsluga = new CenyMiejscaService.CenyMiejscaServiceClient();
            cenyMiejscaUsluga.PobierzKursRublaCompleted += cenyMiejscaUsluga_PobierzKursRublaCompleted;

            cenyMiejscaUsluga.PobierzKursRublaAsync();
        }
        catch(CommunicationException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

但我只收到 Visual Studio 抛出的异常:

【问题讨论】:

  • Visual Studio 没有抛出异常。 .NET 正在抛出异常,而您没有捕捉到它。
  • 我试过了,但这是异步方法。所以我必须在其他地方捕获该异常,我已经阅读了很多文章但找不到解决方案。
  • 我认为您需要在这里发布两个问题帖子,而不是包含两个问题的帖子。

标签: c# .net wcf exception-handling windows-phone-8.1


【解决方案1】:

假设错误处理在 WCF 服务中。你能对这个错误做些什么?几乎什么都没有,因为数据库已关闭,您无法纠正它。 WCF 服务应该做的就是将错误转发给客户端。然后客户端可以解释错误并显示消息。

在您可以实际处理的地方处理错误。

我不清楚第二个问题。看来您只需要捕获生成的CommunicationException。也许InnerException 包含一些有用的东西。如果没有,你可以做的不多。 .NET 中的异常层次结构存在严重缺陷,因为它通常不允许您区分不同的错误。

【讨论】:

  • InnerException 也无法捕获,Visual Studio 会抛出异常。我只是想防止由于某种原因无法访问 WCF 服务时应用程序崩溃。
  • 你可以捕获任何异常,分析内部异常和throw;如果你不想处理它。你的问题得到解答了吗?
  • 但我想处理它。当由于某种原因应用程序无权访问该服务时,我想显示MessageBox。我假设从不使用 catch 块,因为 PobierzKursRublaAsync 方法是异步的?
  • 您可能必须处理 cenyMiejscaUsluga_PobierzKursRublaCompleted 中的错误。搜索“WCF 异步错误处理”。
  • 我没有使用您正在使用的事件驱动异步模式,但 @usr 是正确的 - 异常应该在传递给 cenyMiejscaUsluga_PobierzKursRublaCompleted 的 EventArgs 中。您是否在该方法中设置了断点?您必须在此调试器停止后按 F5/“继续”才能到达那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多