我们将数据类型创建为 XSD 定义。然后将这些 xsd 文件导入 WebSphere Application Server。
我们希望 WebSphere Application Server 能够使用这些数据类型调用 WCF Web 服务。
原来的xsd如下:
<xs:simpleType name="Stillingsprosent">
<xs:restriction base="xs:double"/>
</xs:simpleType>
<xs:element name="gjennomsnittStillingsprosent" type="Stillingsprosent" minOccurs="0" maxOccurs="1"/>
通过 xsd.exe 运行它会生成以下 C# 代码:
public partial class GjennomsnittStillingsprosent {
private double gjennomsnittField;
private bool gjennomsnittFieldSpecified;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public double gjennomsnitt {
get {
return this.gjennomsnittField;
}
set {
this.gjennomsnittField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool gjennomsnittSpecified {
get {
return this.gjennomsnittFieldSpecified;
}
set {
this.gjennomsnittFieldSpecified = value;
}
}
}
然后,当我们在 WCF 合同中使用此数据类型时,它会生成以下 xsd:
<xs:complexType name="GjennomsnittStillingsprosent">
<xs:sequence>
<xs:element name="gjennomsnittField" type="xs:double"/>
<xs:element name="gjennomsnittFieldSpecified" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:element name="GjennomsnittStillingsprosent" nillable="true" type="tns:GjennomsnittStillingsprosent"/>
- 我们希望数据合约与原始 xsd 相同。
- 我们也希望在生成后不需要编辑文件。(数据模型很大)
问题与 minoccurs=0 的可选字段有关,这些字段确实可以为空,但 xsd.exe 是在 .net 具有可空类型之前创建的。
我们如何确保 WCF 合约中使用的数据类型与 XSD 中指定的数据类型完全相同?