生成的 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 时,我都必须重新做一遍。不是很好,但可以正常工作。
我正在使用第三方服务,其 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 时,我都必须重新做一遍。不是很好,但可以正常工作。