WCF-ошибки с SOAP - PullRequest
3 голосов
/ 04 мая 2009

Я запутался в том, как я должен возвращать ошибки клиенту, используя SOAP.

У меня есть служба wcf, но я не уверен, какую технологию использует клиент, поэтому я хотел бы придерживаться спецификации SOAP.

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

Я вижу, что мой сервис имеет много возможных ошибок:

  • Null \ ожидаемые ошибки данных
  • Ошибки формата данных (т. Е. ДБ допускает только 3 символа)
  • Ошибки диапазона данных "Клиент уже существует", ошибки типа "Невозможно обработать ваш запрос"

Было бы уместно создать новый объект для каждого из этих недостатков и бросить так:

FaultException<NullFault>(nf);  
FaultException<InvalidDataFault>(idf);  
FaultException<ArguementFault>(af);  
FaultException<RangeFault>(rf);  

Клиент передает большие объекты с множеством свойств практически каждому методу. (т.е.: клиент, заказ и т. д.).

Будет ли это правильным способом обработки ошибок и отправки обратно клиенту?

Кажется неуместным добавлять каждую ошибку к атрибутам над методом.

IE:

[OperationContract]  
[FaultContract(typeof(NullFault))]  
[FaultContract(typeof(InvalidDataFault))]  
[FaultContract(typeof(ArguementFault))]  
[FaultContract(typeof(RangeFault))]  
void CreateCustomer(Customer customer);  

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

Пожалуйста, дайте мне знать, если этот метод является правильным или есть другое приемлемое решение и как бы вы справились с ситуацией «бизнес-правила».

1 Ответ

2 голосов
/ 04 мая 2009

Возврат ошибки - это правильный способ сделать это в целом, но вы должны также спросить себя, что клиентская программа будет делать с информацией, которую вы возвращаете в случае ошибки. Если клиенту нужно только знать, что произошла ошибка, все, что вам нужно, это одна ошибка. Эта ошибка может включать текст сообщения, которое клиент может отобразить своему пользователю.

Если клиенту необходимо выполнить другое действие в зависимости от того, является ли это NullFault или RangeFault, тогда вам нужны отдельные ошибки. Но если нет разницы между тем и другим, сэкономьте время и усилия программ для себя и клиента и определите только одну ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...