2010-08-04 19 views
5

Me pregunto cómo puedo especificar un parámetro de un método OperationContract en WCF según sea necesario para que el xsd generado contenga minOccurs = "1" en lugar de minOccurs = "0".Cómo especificar un parámetro de OperationContract según sea necesario

Ejemplo:

[ServiceContract(Namespace = "http://myUrl.com")] 
public interface IMyWebService 
{ 
    [OperationContract] 
    string DoSomething(string param1, string param2, string param3); 
} 

genera este xsd:

<xs:element name="DoSomething"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="param1" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param2" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param3" nillable="true" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 

Pero quiero definir minOcurrencias = "1" en el código sin la necesidad de fijar manualmente en el archivo xsd.

+0

http: // stackoverflow .com/questions/1438623/how-can-i-force-wcf-to-autogenerate-wsdls-with-required-method-parameters-minoc/3436039 # 3436039 – Freelancer

+0

Ver [aquí] (http://stackoverflow.com/ preguntas/1438623/how-can-i-force-wcf-to-autogenerate-wsdls-with-required-method-parameters-minocc/3436039 # 3436039) Me adelgazo k que es una mejor solución. –

Respuesta

7

Es posible que necesite ajustar sus parámetros en una clase, a continuación, puede utilizar el atributo DataMember y especificar IsRequired=true:

[ServiceContract(Namespace = "http://myUrl.com")] 
public interface IMyWebService 
{ 
    [OperationContract] 
    string DoSomething(RequestMessage request); 
} 

[DataContract] 
public class RequestMessage 
{ 
    [DataMember(IsRequired = true)] 
    public string param1 { get; set; } 

    [DataMember(IsRequired = true)] 
    public string param3 { get; set; } 

    [DataMember(IsRequired = true)] 
    public string param3 { get; set; } 
} 
+0

Esta no es la respuesta que esperaba leer, pero gracias por aclarar cómo se debe hacer. –

+5

¿Esto no hará que el argumento de 'solicitud' en OperationContract esté marcado como minOccurs = "0" en el xsd generado? – arathorn

+0

@arathorn Veo que nunca recibió una respuesta aquí. Usted trae a colación un punto fuerte. Creo que es correcto. La aplicación de un requisito de parámetro de OperationContract en WCF (por lo que he leído) no se puede hacer en tipos 'Nullable' sin ingresar el contrato del mensaje. Aquí hay un enlace que encontré: http://social.msdn.microsoft.com/Forums/vstudio/en-US/e707ed20-c09c-4e26-927a-7c3071d74ed7/operationcontract-with-required-parameters?forum=wcf .. . Creo que tienes razón en tu punto. –

Cuestiones relacionadas