我们通过WCF SOAP服务发布业务层中包含的功能。 我们使用VS2008并使用可视化设计工具(XMLSpy)编写XSD并使用WSCF.blue生成WSDL
在我们的一个模式中,我们有一个实际上是锯齿状的数组:
<xs:element name="CriteriaGroups" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="CriteriaGroup" type="SearchCriterion" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
当我生成客户端时,对服务的所有调用都会失败,并显示以下错误:
Unable to generate a temporary class (result=1) error CS0030: Cannot convert type 'SearchCriterion[]' to 'SearchCriterion'
网上的常见解决方案是更改Reference.cs
中的以下行:
public SiDemSearchCriterion[][] CriteriaGroups
要:
public SiDemSearchCriterion[] CriteriaGroups
所有来自该属性的引用。
但这没用,因为它可能会运行,但它不起作用。 它丢弃了大部分数据。 将所有内容设置为列表的设置无效。
如何在不更改架构的情况下执行此操作? 这是我们的架构,所以改变它不是太很多问题。 我只是不想用“Microsoft Schema”方式设计它。
合同(WSDL + XSD)集应该是独立于平台的,并且基于通用标准。
所以: