2009-03-26 6 views
6

Теперь я просматриваю WebServices, используя .NET framework (файлы .asmx, а не WCF). Мне интересно, что лучше всего сказать пользователю, что в вызове метода произошла какая-то бизнес-ошибка.Рекомендации по обработке ошибок в веб-службе

Мой маленький тест-случай:

Я измерительных зондов, которые должны регистрироваться с центральным сервером. Каждый зонд должен иметь другой физический адрес. Для регистрации, они должны вызвать (через веб-службы):

[WebMethod] 
public void RegisterReadingStation(out Guid sessionId, Int64 physicalAddress) 

Теперь подпись не высечены в камне - на самом деле, это то, что я пытаюсь выяснить. :) Мне нужно как-то предупредить зонд, если он пытается зарегистрировать себя, используя уже принятый физический адрес.

Как я вижу это, я получил несколько возможностей:

  • кинуть SoapException, содержащий информацию. Тем не менее, string :: message на самом деле не так просто выполнять программные проверки.
  • Используйте некоторый класс значений в качестве параметра возврата (или даже проще, перечисление). Если я это сделаю, то, наверное, мне пришлось вручную сериализовать/десериализовать класс на сервере/клиенте?

Любые мысли об этом?

ответ

1

Я думаю, что общий консенсус будет использовать пользовательский код возврата (целое число). Пока служба документирует, каковы возможные коды возврата, это должно быть осуществимо.

+0

Eek, обратно в C-дней. Проблема с этим подходом заключается в том, что он не очень гибкий. Вы не можете добавлять сообщения об ошибках, такие как stacktrace или сообщение, или .. Я вижу, что это будет простой и многопроцессорный выход. – cwap

+0

Я получил признательность за веб-службы, которые ошибаются в стороне простоты. –

+0

Хотя это не самый высокий голос, я согласен с этим. Мне нравится, что «веб-сервисы должны быть просты в использовании», так что это то, на что я нахожусь сейчас :) – cwap

5

Я возвращаю небольшой класс под названием ResultSet из каждого WebMethod, который содержит int errorcode и строковое errormessage.

Это дает вам легкую проверку на наличие ошибок/успехов и некоторые детали, если все пойдет не так.

Если WebMethod должен возвращать данные, я наследую ResultSet, чтобы дать конкретный ResultSet, чтобы включить данные.

+0

Да, это было то, что я тоже возглавлял :) – cwap

+0

Но что делать, когда функция веб-службы должна возвращать объект, такой как employeeData, когда все идет хорошо, и должно возвращать сообщение об ошибке при возникновении ошибки. Как вернуть два разные объекты от одной и той же функции в разных сценариях? –

+0

То, что я сделал, это создать новый класс, который называется EmployeeDataResultSet, который наследуется от ResultSet. Затем я добавил свойство EmployeeDataResultSet, которое является классом EmployeeData. Баснически, вы инкапсулируете данные своего сотрудника в свой ResultSet. – Moose

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