Как указать параметр OperationContract как требуется - PullRequest
5 голосов
/ 04 августа 2010

Интересно, как я могу указать параметр метода OperationContract в WCF по мере необходимости, чтобы сгенерированный xsd содержал minOccurs = "1" вместо minOccurs = "0".

Пример:

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

генерирует этот 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>  

Но я хочу определить minOccurs = "1" внутри кода без необходимости ручного исправления в файле xsd.

Ответы [ 2 ]

8 голосов
/ 04 августа 2010

Вам может понадобиться обернуть ваши параметры в классе, тогда вы можете использовать атрибут DataMember и указать 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; }
}
2 голосов
/ 16 марта 2015

Мне нравится эта реализация: http://thorarin.net/blog/post/2010/08/08/Controlling-WSDL-minOccurs-with-WCF.aspx

...