【问题标题】:svcutil generated unneccesary wrapper classessvcutil 生成了不必要的包装类
【发布时间】:2011-06-07 11:03:06
【问题描述】:

我正在开展一个使用合同优先方法的项目。我得到了一个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 的开关吗?

【问题讨论】:

    标签: wsdl svcutil.exe


    【解决方案1】:

    我和你在同一条船上,但我不只是想忍受它。我想生成干净(未包装)的合同。如果将 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 足够小,我可以对其进行调整以遵守此规则。
    然而,像罗恩一样,我也遇到过最简单的事情就是忍受它。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我处于同样的情况(合同优先),svcutil 正在为我生成同样类型的代码,但我只是闭上眼睛深呼吸并接受它:-)

      只需使用不带数字后缀的类型即可。

      【讨论】:

      • “只需使用没有数字后缀的类型,它就可以工作。”,我认为 C# 代码不会以这种方式编译。没有数字后缀的类型对于编译器来说是完全不同的名称。
      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 2013-11-27
      • 2011-06-27
      • 2014-05-21
      • 2015-04-20
      • 2013-11-14
      • 2011-10-01
      相关资源
      最近更新 更多