ServiceStack: как бороться с ошибками? - PullRequest
7 голосов
/ 14 января 2011

До сих пор я пользуюсь ServiceStack с отличными результатами, за исключением того, что работа с ошибками кажется хитрой. Если что-то идет не так во время сериализации сообщения (потому что я забыл добавить конструктор по умолчанию к сообщению, например), все, что получает клиент, - это сообщение о том, что на сервере произошла внутренняя ошибка, и код состояния 500. Добавление слушателя в Событие HttpApplication.Error в Global.asax не работает, так как его никогда не ударили. Ни один не делает Application_Error. Мало того, что этого недостаточно для сценариев конечных пользователей, это делает отладку этих ошибок очень громоздкой, поскольку единственный способ выяснить, что пошло не так, это уродливое выражение в Quick Watch:

Encoding.Default.GetString( ((System.IO.MemoryStream)((SyncMemoryStream)((System.Net.HttpWebResponse)(((WebException)ex).Response)).ResponseStream))._buffer)

Мне хотелось бы перехватить все ошибки на стороне сервера (будь то сериализация с помощью ServiceStack или ошибки в моих службах) и добавить необходимую информацию в коллекцию Errors, которая есть во всех моих типах сообщений.

1 Ответ

11 голосов
/ 25 января 2011

См. Страницу проверки и обработки ошибок ServiceStack вики-страницы для получения дополнительной информации об обработке ошибок и проверке в ServiceStack.

В настоящее время нет способа обработать исключение сериализации с помощью пользовательской логики (хотя теперь я добавлю это в список TODO:).

Если у вашего Responto DTO есть свойство ResponseStatus (то есть или оно наследуется от IHasResponseStatus), ServiceStack автоматически сериализует ваше исключение.

Чтобы также заставить его сериализовать ваш набор StackTrace DebugMode в значение true с SetConfig () в вашем сценарии загрузки AppHost.Configure ().

...