【发布时间】:2013-03-21 22:37:05
【问题描述】:
所以我正在设计一个Web 服务,当然;我需要这个Service 来自动写入一个Database。这很简单;但显然 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;
所以我想为什么不创建一个 Class 来处理大多数这些可能的错误。考虑到这个特定的实现:
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?
感谢您的帮助。
【问题讨论】:
-
如果你的服务返回了一个好的值的字符串和一个异常消息的字符串,你的客户端将有一个噩梦要解决
-
另外这里已经有像你这样的问题stackoverflow.com/questions/856993/…
-
@Steve 我的 Google 技能似乎很糟糕,因为我没有看到那篇文章。我很抱歉。
-
有时只需查看此页面右侧的相关列很有用
标签: c# web-services exception