我们通过 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)集应该是独立于平台的并且基于通用标准。
所以:
- 有没有办法让 SVCUTIL 在不更改架构的情况下构建一个工作客户端?
- 如何更改架构以使 SVCUTIL 开箱即用地构建客户端?