我正在开发一个使用合同第一种方法的项目。我获得了WSDL
和三个xsd's
。当我使用svcutil
时,它会在响应类周围生成一个包装器,如下所示:
public partial class getDataByIdResponse1 {
public getDataByIdResponse getDataByIdResponse;
public getDataByIdResponse1() {
}
public getDataByIdResponse1(getDataByIdResponse getDataByIdResponse) {
this.getDataByIdResponse = getDataByIdResponse;
}
}
getDataByIdResponse
包含在getDataByIdResponse1
对象中。这是由svcutil
完成的,我不明白为什么。 getDataByIdResponse1
中不存在WSDL
对象:
<wsdl:message name="getDataById">
<wsdl:part name="response" element="tns:getDataByIdResponse"/>
</wsdl:message>
<xs:element name="getDataByIdResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="data" type="sbc:DataType" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
为什么类型getDataByIdResponse
包含在getDataByIdResponse1
中?我应该使用svcutil
的开关吗?
答案 0 :(得分:0)
我处于相同的情况(合约优先),svcutil为我生成了同样的代码,但我只是闭上眼睛深吸一口气并接受它: - )
只使用没有数字后缀的类型,它只是起作用。
答案 1 :(得分:0)
我和你在同一条船,但我不只是想和它一起生活。我想生成干净的(未包装的)合同。如果给你wsdl和xsd,那么你的架构和wsdl需要遵循一些规则,以便svc util生成未包装的代码。这些链接帮助我更好地理解了这个问题
http://pzf.fremantle.org/2007/05/handlign.html
http://mharbauer.wordpress.com/2007/10/19/wcf-datacontract-serializer-and-documentwrapped/
现在我的架构和wsdl足够小,我可以调整它们以遵守这个规则 然而,就像罗恩一样,我也遇到过最容易接受的事情。
希望这有帮助。