生成的 WSDL 代理 class 名为 "System"

Generated WSDL Proxy has class named "System"

我正在使用第三方服务,其 WSDL 定义了一个名为 System 的 class。使用 Add Service Reference,Visual Studio 生成一个具有名为 System 的 class 的代理,这会导致各种编译问题。

我正在寻找在不违反合同的情况下避免此问题的最佳方法。

我尝试修改 Reference.cs,但我所做的搞砸了序列化。此外,由于每次有人更新服务引用时此文件都会更改,因此这不是一个好的长期解决方案。

我很好奇以前是否有人遇到过这样的问题,以及如何最好地解决它。

复杂类型如下:

<xsd:complexType name="System">
  <xsd:all>
    <xsd:element name="timer_frequency" type="xsd:string"/>
    <xsd:element name="acceptable_timer" type="xsd:string"/>
    <xsd:element name="fail_instructions" type="xsd:string"/>
    <xsd:element name="dispatch_instructions" type="xsd:string"/>
    <xsd:element name="system_descr" type="xsd:string"/>
  </xsd:all>
</xsd:complexType>

与其解决您的问题,不如将您的服务命名空间更改为 "System" 以外的其他名称。

添加服务引用时,您可以选择提供所需的命名空间,但是使用系统会自动添加到顶部,这会搞砸。如果服务无法修改,我猜你应该避免添加引用并手动生成代理,修改它并添加到你的项目中。

此问题的最终解决方案涉及生成服务引用(我选择通过 svcutil.exe 这样做),然后手动将 System class 修改为其他名称(我选择了 Sys)。我还必须更改 SoapTypeAttribute 以包含 TypeName="System".

然后,每当他们更新 API 时,我都必须重新做一遍。不是很好,但可以正常工作。