c# - 事件驱动异步 WCF 服务调用中的异常处理

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

问题涉及使用 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 抛出的异常: enter image description here

最佳答案

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

在您可以实际采取措施的情况下处理错误。

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

关于c# - 事件驱动异步 WCF 服务调用中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27841049/

相关文章:

c# - 拉力赛API : How do I create a UserStory and relate it to a Feature?

.net - 在 WCF 客户端中连接返回的对象实例

c# - Linux Web 服务器和 .NET 客户端应用程序之间的实时通信

.net - 不同的 WSDL ASMX、WCF Web 服务

c# - 为 StringLength 属性使用参数

c# - 首次显示后如何重置jit treemap控件?

c# - 在 Azure 搜索文档中使用枚举

.net - global.asax 中的错误无法执行 server.transfer

c# - 在哪里可以找到MSIL字符串常量中的转义字符列表?

c# - 从列表列表创建树 C#