0

所以我正在设计一个网络服务,当然;我需要这个服务来自动写入数据库。这很简单;但显然Sql有玩不好的倾向。

在进行故障排除时,这几乎是一场噩梦,更不用说通过Web 服务进行调试会使它更加成为一场噩梦。

所以我上网查了一下,偶然发现了一篇关于 Stack Overflow 的文章,里面谈到了一个SqlHelper 类,它基本上有很多这样的列表:

public static bool IsDuplicateId(SqlException sex)
{
    return (sex.Number == 2601);
}

这样实现会很乏味,因为您必须调用所有这些方法。然而,有人回答说:

switch (e.Number)
    case 2601:
         // Do Something
         break;
    default:
        throw;

所以我想为什么不创建一个来处理大多数这些可能的错误。考虑到这个特定的实现:

public class SqlExceptionHelper
{
    public SqlExceptionHelper(SqlException sqlException)
    {
        // Do Nothing.
    }

    public static string GetSqlDescription(SqlException sqlException)
    {
        switch (sqlException.Number)
        {
             case 21:
                 return "Fatal Error Occurred: Error Code 21.";
             case 53:
                 return "Error in Establishing a Database Connection: 53.";
             default
                 return ("Unexpected Error: " + sqlException.Message.ToString());
         }
     }
}

所以我的思考过程是我有一个可以重用的类来检测一些常见的错误;在其他类中,我using SomeNamespace.ExceptionHelpers;可以简单地实现类似这样的东西:

public class SiteHandler : ISiteHandler
{
     public string InsertDataToDatabase(Handler siteInfo)
     {
          try
          {
              // Open Database Connection, Run Commands, Some additional Checks.
          }
          catch(SqlException exception)
          {
             SqlExceptionHelper errorCompare = new SqlExceptionHelper(exception);
             return errorCompare.ToString();
          }
     }
}

所以本质上它应该处理所有那些可爱的异常;但我开始想这不好。 将此类异常作为回报返回好吗?这本身就很糟糕吗?或者这真的是通过服务处理此类异常捕获的最佳方式吗?

所以我的问题归结为:

       Is this the best way to handle error catching through a Service?

感谢您的帮助。

4

1 回答 1

3

理想情况下,Web 服务应该返回相关的 HTTP 状态代码,而不是异常。这些通常是 200 的(对于 OK)、400 的(对于用户可以自己修复的错误)或 500 的(对于服务器错误 - 这些也可以自动重试)。

根据您返回的数据库错误,您可以将其转换为适当的 HTTP 状态代码。如果您认为对用户有帮助,可以将错误代码的描述设置为异常消息。

于 2013-03-21T22:46:38.417 回答