Как указать параметр операцииContract по мере необходимости
-
25-09-2019 - |
Вопрос
Интересно, как я могу указать параметр метода ExperialContract в 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.
Решение
Возможно, вам придется обернуть свои параметры в классе, то вы можете использовать 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; }
}
Другие советы
Эта реализация приятно для меня:http://thorarin.net/blog/2010/08/08/Controlling-wsdl-minoccurs-with-wcf.aspx.
Не связан с StackOverflow