【问题标题】:Code First .NET Web Service uses soap encoding - how can this be prevented?Code First .NET Web 服务使用肥皂编码 - 如何防止这种情况?
【发布时间】:2010-11-22 15:21:24
【问题描述】:

从 .NET 接口生成 wsdls 时,如何将 asp.net / asmx 配置为根本不使用soap编码?简而言之,一个.NET SOAP Web 服务正在生成一个包含soap 编码的wsdl。例如:

<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
  <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
  <s:complexType name="StringArray">
    <s:complexContent mixed="false">
      <s:restriction base="soapenc:Array">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="String" type="s:string" />
        </s:sequence>
      </s:restriction>
    </s:complexContent>
  </s:complexType>
</s:schema>

这无法使用 CXF 中的 wsdl2java 进行解析,这是一个 JAX-WS 实现,由于 soapenc:Array 位。解决方法是将上面的xml更改为:

<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
  <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
  <s:complexType name="StringArray">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="String" type="s:string" />
        </s:sequence>
  </s:complexType>
</s:schema>

【问题讨论】:

  • 这是 .Net 未能生成正确的 WSDL 还是 wsdl2java 未能完全支持 WSDL?我不知道答案,但对我来说,理解这一点至关重要,以确保我正在解决问题而不是支持问题的错误结局。
  • 我对你的问题投了反对票,因为我无意阅读你的博客文章只是为了帮助你解决这个问题。编辑您的问题,使其独立存在,我将删除反对票。我不介意你的博客文章的链接,但问一个依赖于该链接的问题是没有意义的。
  • 它不依赖于博文——我把它放在那里供参考。问题是完整的,无论如何。我要问的是“从 .NET 接口生成 wsdls 时,如何配置 asp.net / asmx 以完全不使用肥皂编码?”为了不给别人留下回答问题取决于阅读外部链接的印象,我将其删除。
  • @Lazarus 提出了一个很好的观点,但是您无法更改 MS 的 WSDL 实现或 wsdl2java 对它的解释。

标签: .net wsdl asmx jax-ws wsdl2java


【解决方案1】:

这是一个问题,一个是 6,另一个是 12/2 - wsdl2java 没有像 Microsoft 的 WSDL 实现认为的那样正确支持任何复杂类型。

讨论这是Java还是MS的错有点毫无意义。

不幸的是,很少有 SOAP 实现可以处理原始类型以外的任何内容,因此虽然 Microsoft Web 服务在表面上看起来非常适合互操作性,但实际上它们只能与 Microsoft 的代理一起工作。

对于您的解决方法,您有几个选择:

  1. 坚持原始 .Net 类型 - 基本上是值类型 + 字符串。没有数组、列表或任何具有复杂序列化的东西。

  2. 编写您自己的HttpHandler 以返回 Java 可以处理的格式的 Xml - 实际上我在处理 Flex/ActionScript(也有同样的问题)时做过类似的事情。

    李>
  3. 采用不同的格式 - 恕我直言,大多数网络正在从 SOAP 转向 REST 样式的服务。

其中 (1) 是最简单的,但也是最笨重的。您最终会得到类似 WDSL 描述的返回字符串的 SOAP 方法的技巧,但该字符串实际上是使用 Java 可以解析的编码 XML。呵呵。

在跨平台工作时,你总是会得到这样有趣的东西:-(

【讨论】:

  • 投了赞成票。 1)我们自己不控制.NET asmx/wsdl,所以我认为这是不可能的。另外,这对这样做的团队来说是一个重大变化。 2) 我们最终可能会通过 ESB 公开服务和 wsdl,而不是直接访问 .asmx,所以这可能是最好的选择。 3) 完全同意。我们正在路上,但有两个肥皂服务需要维持一段时间。
猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多