Недавно я столкнулся с проблемой веб-службы SOAP, где WSDL указывает целое число для определенного поля, но XML приходит с пустым элементом, из-за чего логика десериализации .NET выдает исключение FormatException.
WSDL выглядит следующим образом:
<xsd:element minOccurs="0" maxOccurs="1" name="TransID" type="xsd:int" />
И SOAP выглядит так:
<TransID></TransID>
Это вызывает исключение при разборе ответа. Сервер, с которым я разговариваю, принадлежит поставщику, поэтому у меня нет возможности его изменить. Я взломаю это в краткосрочной перспективе, переопределив поле как строку.
Мой вопрос заключается в следующем: пытаясь диагностировать эту проблему, я вытащил XML в файл и создал свой собственный XmlSerializer для проверки десериализации с использованием POCO, сгенерированного импортом WSDL. XmlSerializer, который я создал, отлично анализирует этот XML и создает родительский тип, как и ожидалось. Никаких исключений. Значение поля равно нулю, чего и следовало ожидать. Почему десериализатор SOAP рвет, а простой десериализатор, который я создал, работает нормально?