我想知道如何根据需要在WCF中指定OperationContract方法的参数,以便生成的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文件中手动修复它。
答案 0 :(得分:8)
您可能需要将参数包装在一个类中,然后可以使用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; }
}
答案 1 :(得分:2)