0

我有一个与 WPF 应用程序一起使用的 WCF 服务。

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

我已成功创建错误 DataContract,并且可以在 WPF 应用程序中获取数据。事实上,整个系统都按预期工作。然而,我的问题是以下代码部分对我的强迫症造成了严重破坏。这似乎是砍和斜线。

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 部分是真正困扰我的部分。

4

1 回答 1

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() :-)

于 2013-10-24T07:32:25.893 回答