How to specify a parameter of an OperationContract as required
Asked Answered
V

2

7

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.

Vitalism answered 4/8, 2010 at 14:33 Comment(2)
See here I think that it is better solution.Spidery
#1439123Fawnia
V
10

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; }
}
Vlada answered 4/8, 2010 at 14:49 Comment(3)
This isn't the answer I hoped to read, but thank you to make clear how it must be done.Vitalism
Won't this just make the 'request' argument in the OperationContract marked as minOccurs="0" in the generated xsd?Lapidary
@Lapidary I see you never received a response here. You bring up a strong point. I think you are correct. Enforcement of an OperationContract parameter requirement in WCF (as far as I have read) can not be done on 'Nullable' types without entering message contract. Here is a link I found: social.msdn.microsoft.com/Forums/vstudio/en-US/… ... I think you are right on your point.Oehsen
S
3

This implementation is nice to me: http://thorarin.net/blog/post/2010/08/08/Controlling-WSDL-minOccurs-with-WCF.aspx

Spalla answered 16/3, 2015 at 15:29 Comment(1)
The article has been moved to thorarin.net/blog/post/2010/08/08/…Sudatorium

© 2022 - 2024 — McMap. All rights reserved.