Como posso forçar o WCF a gerar automaticamente WSDLs com parâmetros de método necessários (minoccurs = “1”)?
Ao usar o WCF e o OperationContracts, tenho o seguinte método definido:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Quando isso é traduzido para um WSDL pelo tempo de execução do WCF, ele acaba com minoccurs = "0" listado para os parâmetros someId e messageData (e, subsequentemente, gera um erro de tempo de execução se esses parâmetros estiverem ausentes).
Se eu gerar um proxy usando SoapUI eu recebo algo parecido com isto:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
O campo id em MyComplexType é marcado com o atributo DataMemeber usando IsRequired = "true" e, portanto, é exposto como obrigatório.
Obviamente, é bastante enganoso para o WSDL especificar que um parâmetro é opcional quando não é, mas não consigo ver nenhuma maneira óbvia de marcar o OperationContract para forçar o WCF a reconhecer e expor esses parâmetros conforme necessário.
Estou um pouco perplexo, não parece uma maneira óbvia de fazer isso (lendo intellisense / msdn / google). Ou eu estou ficando cego e ignorando algo óbvio.
Alguma pista?