Обработка неизвестного мыльного сообщения от WCF - PullRequest
0 голосов
/ 18 января 2012

У меня есть клиент, сгенерированный с использованием SVCUTIL из WSDL + XSD в консольном приложении C # .net.Все хорошо, но для какой-то логической цели обработки ошибок клиент может получить ответное сообщение, которое не определено в WSDL, следовательно, десериализация и произойдет сбой, но метод не выдает исключение, но возвращает ноль.обработайте эту ситуацию или я определю сообщение об ошибке / ошибке xsd (для мыльного сообщения, возвращенного сервером), а в случае нулевого ответа обработайте / десериализуйте сообщение.

PS: моя удаленная служба не может выдать исключение ошибкиза логические ошибки. (да, там есть небольшая блокировка).

1 Ответ

2 голосов
/ 19 января 2012

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

Языки программирования имеют подход для решения этой проблемы - в случае .NET вы должны использовать тип object в качестве возвращаемого значения, и вам всегда придется вручную исследовать, какой тип вы получили и как обрабатывать возвращаемое значение. В случае WCF у нас также есть такой высокоуровневый тип - System.ServiceModel.Channels.Message, но вы действительно не хотите его использовать, потому что в этом случае вам придется создавать запрос SOAP вручную и анализировать входящие ответы вручную.

Как примечание в веб-службах, один тип запроса всегда имеет один тип ответа и ноль или более типов ошибок (которые являются ошибками SOAP). Если у вас есть служба, которая возвращает разные типы ответов для одного типа запроса, такая служба не является «действительной» веб-службой и не может быть описана WSDL. Из-за этого он не может быть строго типизирован и предоставлен автоматически сгенерированным прокси WCF.

...