2013-03-21 3 views
0

Так что я проектирую веб-службу и, конечно же; Мне нужно это Служба для автоматической записи в База данных. Это довольно прямолинейно; но, очевидно, Sql имеет тенденцию не играть хорошо.Захват базы данных Исключения

Который в значительной степени создает кошмар при устранении неполадок, не говоря уже через веб-службу . сделает его еще более кошмарным для отладки.

Поэтому я проверил в интернете и наткнулся на статью о переполнении стека, говорившему о SqlHelper класса, который по существу был массивный список этих:

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

Так что реализация будет утомительно, как вы 'd необходимо вызвать все эти Методы. Тем не менее, кто-то ответил:

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? 

Спасибо за помощь.

+2

Если ваша служба возвращает строку для хорошего значения и строку для сообщения об исключении, ваш клиент будет иметь кошмар для решения на своей стороне. – Steve

+0

Также есть вопрос, похожий на ваш здесь http://stackoverflow.com/ Вопросы/856993/правильная уловка из-за-исключения-через-web-сервис? rq = 1 – Steve

+0

@Steve Мои навыки Google, похоже, сосут, поскольку я не видел эту статью. Мои извинения. – Greg

ответ

3

В идеале веб-службы должны возвращать соответствующие коды состояния HTTP, а не исключения. Обычно они находятся в 200-х годах (для OK), 400 (для ошибок, которые пользователь может исправить) или 500 (для ошибок сервера - они также могут быть автоматически повторены).

На основании вашей ошибки базы данных вы возвращаетесь, вы можете перевести ее в соответствующий код состояния HTTP. Описание кода ошибки может быть настроено на сообщение об исключении, если вы считаете, что это поможет пользователю.

+0

Так что, по существу, я должен преобразовать эти Исключения в HTTP-коды состояния; чтобы не казаться наивным.Но почему важно вернуть код ошибки HTTP, а не только строку исключения? – Greg

+1

Потому что Исключения - это .NET-специфическая концепция. Интернет охватывает гораздо больше языков, многие из которых не понимают Исключения. – rein

+0

Это на самом деле имеет смысл, спасибо за объяснение. – Greg

Смежные вопросы