svcutil生成了不必要的包装类

时间:2011-06-07 11:03:07

标签: wsdl svcutil.exe

我正在开发一个使用合同第一种方法的项目。我获得了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的开关吗?

2 个答案:

答案 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足够小,我可以调整它们以遵守这个规则 然而,就像罗恩一样,我也遇到过最容易接受的事情。

希望这有帮助。