При использовании WCF и OperationContracts определен следующий метод:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Когда это преобразуется в WSDL во время выполнения WCF, оно заканчивается с minoccurs = "0", указанным для параметров someId и messageData (и впоследствии выдает ошибку времени выполнения, если эти параметры отсутствуют).
Если я создаю прокси с помощью SoapUI, я получаю что-то похожее на это:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
Поле id в MyComplexType помечено атрибутом DataMemeber с использованием IsRequired = "true" и, таким образом, отображается как обязательное.
Очевидно, что WSDL вводит в заблуждение указание, что параметр является необязательным, когда это не так, но я не вижу никакого очевидного способа разметить OperationContract, чтобы заставить WCF распознавать и предоставлять эти параметры по мере необходимости. *
Я немного сбит с толку, там не кажется очевидным способ сделать это (чтение intellisense / msdn / google). Или я ослепну и пропущу что-то очевидное.
Есть какие-нибудь подсказки?