【问题标题】:Generated WSDL Proxy has class named "System"生成的 WSDL 代理具有名为“系统”的类
【发布时间】:2015-04-28 15:02:01
【问题描述】:

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

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

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

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

complexType如下:

<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>

【问题讨论】:

  • 您是否尝试过在不同的命名空间中生成类型?请参阅msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx中的 /namespace 选项
  • @EugeneOsovetsky:您是否意识到您指向 WSDL.EXE 的 .NET 2.0 页面,我们甚至不知道他是否使用了那个过时的工具?
  • 您使用的是哪个“导入工具”?您应该首先尝试使用“添加服务参考”。如果这不起作用,请尝试“svcutil.exe”。
  • 使用添加服务参考。我也在设置一个有意义的命名空间。

标签: c# .net soap visual-studio-2013 wsdl


【解决方案1】:

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

然后,每当他们更新他们的 API 时,我都必须从头再来。不是很好,但可以让事情正常进行。

【讨论】:

    【解决方案2】:

    您应该将服务命名空间更改为“系统”以外的其他名称,而不是解决您的问题。

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

    【讨论】:

    • 服务命名空间不是系统。服务定义的类之一是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    相关资源
    最近更新 更多