Search code examples
c#wcfwsdloperationcontract

How to specify a parameter of an OperationContract as required


I wonder how I can specify a parameter of an OperationContract method in WCF as required so that the generated xsd contains minOccurs="1" instead of minOccurs="0".

Example:

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

generates this 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>  

But I want to define minOccurs="1" within the code without the necessity to manually fix it in the xsd file.


Solution

  • You might need to wrap your parameters in a class, then you can use the DataMember attribute and specify 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; }
    }