Durante el uso de WCF y OperationContracts Tengo el siguiente método definido:¿Cómo puedo forzar a WCF a generar automáticamente WSDL con los parámetros de método requeridos (minoccurs = "1")?
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Cuando esto se traduce a un WSDL por el tiempo de ejecución de WCF, termina con con minOccurs = "0" en la lista para la someId parámetros y messageData (y posteriormente arroja un error de tiempo de ejecución si faltan estos parámetros).
Si genero un proxy utilizando SoapUI consigo algo que se parece a esto:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
el campo ID en MyComplexType está marcado con DataMemeber atributo mediante isRequired = "true "y por lo tanto se expone como obligatorio.
Es obviamente bastante engañoso para el WSDL especificar que un parámetro es opcional cuando no lo es, pero no veo ninguna forma obvia de marcar el OperationContract para obligar a WCF a reconocer y exponer estos parámetros según sea necesario.
Estoy un poco desconcertado, no parece una forma obvia de hacerlo (leyendo intellisense/msdn/google). O me estoy quedando ciego y pasando por alto algo obvio.
¿Alguna pista?
que he encontrado este problema Microsoft Connect https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx ? FeedbackID = 482144 que implica que esto podría no ser posible. Lo que apesta. – DavidWhitney
Pensándolo mejor, parece como si los parámetros se enumeran como minoccurs = "0" porque los tipos en sí podrían ser nulos, por lo tanto, si alguien proporcionara un nulo, igual coincidiría con el método sig. Aún no ayuda a los fines de la generación de WSDL y la definición de un contrato con una aplicación/organización de llamada. – DavidWhitney
el WSDL generado no se ve afectado porque el tipo podría ser nulo (tipos de referencia frente a tipos de valores). Si se omite un tipo de valor, se usará el valor predeterminado para ese tipo de valor. Ver mi respuesta a continuación sin embargo. – Thorarin