Удаление необязательного элемента типа значения из сообщения SOAP, отправленного через прокси-сервер WCF

У нас есть wsdl, определяющий элемент datetime. Он может принимать значение NULL в том смысле, что minOccurs=0. Однако использование svcutil для создания прокси-класса не дает нам свойства DateTime .net, допускающего значение NULL, поэтому как лучше всего заставить прокси-класс сериализовать сообщение в сообщение SOAP, не содержащее элемент datetime?


person Gaz    schedule 15.12.2008    source источник


Ответы (1)


svcutil обрабатывает случай, когда элемент помечен как minOccurs="0", создавая дополнительное логическое свойство с именем "xxxSpecified" (где "xxx" — это имя элемента). Чтобы исключить элемент из вашего SOAP-сообщения, вы должны установить для этого свойства значение false. Чтобы включить элемент, вы должны установить для этого свойства значение true.

Итак, если бы элемент назывался «Fred», svcutil предоставил бы вам два свойства в вашем прокси-классе:

ДатаВремя Фред

а также

bool FredSpecified

Если вы хотите включить Фреда в сообщение SOAP, вы должны установить для свойства Fred значение даты и времени, которое вы хотите отправить, и установить для параметра FredSpecified значение true.

Если вы не хотите включать Fred в SOAP-сообщение, вы должны установить для FredSpecified значение false (при этом не имеет значения, какое значение находится в свойстве Fred).

svcutil предоставит вам правильные типы, допускающие значение NULL, только если ваш WSDL использует стиль нулей nillable="true", а не стиль minOccurs="0".

person Eric Rosenberger    schedule 15.12.2008