2009-06-15 35 views
8

Tengo un servicio web ASP.NET. Este servicio web funciona bien. Sin embargo, WSDL enumera algunos parámetros como opcionales (minoccurs = 0) y otros como no opcionales. Algunos de los parámetros opcionales en realidad no son opcionales, otros que están marcados como no opcionales son en realidad opcionales. Me gustaría arreglar esto, pero no puedo encontrar la ubicación de donde proviene esta información.Parámetros opcionales en el servicio web ASP.NET

Me parece que todos los tipos primitivos (int, booleano, etc.) no son opcionales y todos los demás parámetros están marcados como opcionales. Sin embargo, no puedo encontrar un lugar donde pueda cambiar esto. Me gustaría especificar valores por defecto para los valores primitivos si faltan en la solicitud y especificar qué parámetro no primitivo es realmente opcional. ¿Dónde hago esto?

Respuesta

7

Supongo que cuando dice servicios web ASP.net, está creando servicios web con extensión ASMX. Creo que lo que sucede en este caso es que todos los tipos anulables se vuelven opcionales y no aceptan nulos y no son opcionales.

Podría editar manualmente el archivo WSDL generado. Pero entonces tendrías que volver a hacer ese trabajo si el wsdl se regeneró.

Le sugiero que cambie a WCF con basisHttpBinding (excepto por el nombre de su servicio, sus clientes no deberían notar la diferencia).

Usando WCF sólo tiene que marcar el parámetro en el contrato de datos como se requiere o no:

[DataMember(IsRequired="false")] 
+0

Esta respuesta es casi completamente falso. No puede usar elementos nulables en lugar de parámetros opcionales. Desde .Net 4.0 puede usar [parámetros opcionales] (http://msdn.microsoft.com/en-us/library/dd264739.aspx) en cualquier método. – Bora

+1

@Bora, la respuesta es de 2009, en ese momento esto era lo que estaba disponible. –

+0

Nada de malo en eso. Simplemente actualice su respuesta y todo estará bien nuevamente. – Bora

6

Las primitivas no son referencia tipos, sino que son valor tipos. Puede hacer que un valor de escriba "nulable" de varias maneras.

La taquigrafía es

int? i; 

o largo mano aquí

Nullable<int> i; 
+0

¿Cómo se distingue entre omitir el parámetro (y usar un valor predeterminado) frente a querer establecer el valor en NULL? – Shiv

Cuestiones relacionadas