WCF错误类型标识

时间:2013-10-24 06:57:37

标签: c# wcf error-handling

我有一个WCF服务,我正在使用WPF应用程序。

我正在尝试实现错误处理,以便服务将根据错误向用户提供指令,即(例如,代码错误写入日志并通知用户联系支持)vs(例如,尝试将重复值写入唯一字段通知用户字段有重复并要求更改值并再次尝试...没有日志条目)

我已经成功创建了我的错误DataContract,我可以在我的WPF应用程序中获取数据。事实上,整个系统可以按需运行。然而,我的问题是以下部分代码正在对我的OCD造成严重破坏。这似乎是破解和削减。

try
{
    db.SaveChanges();
}
catch (Exception ex)
{
    String message = "";

    if (ex.InnerException.ToString()
          .Contains("Cannot insert duplicate key row") == false)
    {
        logError le = new logError();
        le.log(ex, "AddTemplate");

        message = "An error has occured, 
                   please contact you support representative";
    }
    else
    {
        message = "Code already exists";
    }

    throw new FaultException<myError>
              (new myError { Operation = "Add Template",
                             ProblemType = message });
} 

是否有更好的方法来识别错误,以便向客户端发送特定消息,而不是我在此处所做的事情。 String.Contains部分是真正困扰我的部分。

1 个答案:

答案 0 :(得分:1)

一般情况下,我认为最好始终打开错误代码,而不是对错误消息执行字符串比较。

catch (SqlException ex)
{
    if (ex.Errors.Count > 0)
    {
        switch (ex.Errors[0].Number)
        {
            case 547: //foreign Key violation
                //throw or handle FK violation
                break;
            case 2601: //primary key violation
                //throw or handle PK violation
                break;
            default:
                //throw or handle 'Other' violation
                break;
        }
    }

    //throw or handle "general" errors.
}

错误代码列表http://msdn.microsoft.com/en-us/library/cc645728.aspx

最佳做法也可能是让您自己的服务返回错误代码,以便您构建的其他应用程序希望将来重用这些服务,但希望显示不同类型的错误消息(例如图形错误图标或替代文本)不会被强制对你要返回的字符串执行.Contains(): - )