WCF-ошибки с SOAP

Я запутался в том, как я должен возвращать ошибки клиенту, используя 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 ответ

Решение

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

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

Другие вопросы по тегам