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, тогда вам нужны отдельные ошибки. Но если нет разницы между тем и другим, сэкономьте время и усилия для себя и клиентских программ и определите только одну ошибку.