【问题标题】:Consuming Java Web Service from .NET从 .NET 使用 Java Web 服务
【发布时间】:2010-10-26 13:53:56
【问题描述】:

我现在有一个用 Java 编写的 Web 服务,我想在 .NET 世界中使用该 Web 服务。我使用 WSDL 将代理类添加到我的 .NET 应用程序,但是当我调用 Java Web 服务方法时,响应始终为空。有谁熟悉这个问题?

更新1:

我注意到的另一件事是,我打开了其中一个 svcinfo 文件,发现以下代码:

<endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://fff.mywebserive/somewebservie&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;DOC_TOI_Binding&quot; contract=&quot;ServiceReference1.DOC_TOI_PortType&quot; name=&quot;DOC_TOI_Port&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data 

这对我来说不合适!

更新 2:解决方案(种类)

问题在于响应的命名空间与客户端代理类使用的命名空间不同。这样,对象就永远不会正确反序列化。有一次,我更改了命名空间以匹配它工作正常的响应命名空间。但是现在,如果我更新 Web 服务引用,我将再次遇到与更新命名空间相同的问题。解决这个问题的好方法是什么?我能想到的唯一解决方案是要求 Web 服务的创建者使用正确的命名空间。

【问题讨论】:

  • 如果您可以联系网络服务的创建者,请联系,但请确保这是您问题的正确解决方案。

标签: java .net web-services


【解决方案1】:

使用 .Net,我们可以使用服务引用或 Web 服务引用在我们的应用程序中添加 java Web 服务。

服务参考 - 这是调用 Microsoft WCF Web 服务 3.5 及更高版本的专用方式。 Web Service Reference - 引用非 Microsoft Web Service 和 Microsoft Webservice 的低版本(例如 2.0)的方式

我们也可以在非微软web服务中使用Service reference,我们只需要修改app.config中的一些配置,比如Security Configurations()

现在,当调用 Web 服务请求方法时,它总是以 NULL 对象响应结束。

(这是由于代理命名空间预期响应与实际 xml 命名空间 web 服务响应之间的差异造成的)

示例: 代理代码 [返回:System.Xml.Serialization.XmlElementAttribute("GetResponse", Namespace = "http://AJ_TUASON.COM ")]

公共GetResponse Get() {}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://AJ_TUASON.COM")]

公共部分类 GetResponse {}

实际的 XML 命名空间响应

webservice:GetResponse xmlns:"http://AJTUASON.COM"

要解决此问题,请安装 fiddler2。这将帮助您跟踪并确认 Web 服务工作正常。

然后,从 Web 服务复制 XML 响应中的实际名称空间。

将实际的 xml 命名空间响应粘贴到 .NET 的代理类中:

示例: [返回:System.Xml.Serialization.XmlElementAttribute("GetResponse", Namespace = "http://AJTUASON.COM ")] 公共 GetResponse Get() {}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://AJTUASON.COM")] 公共部分类 GetResponse {}

这将解决 Null 问题。

注意:不要总是依赖生成代理类的工具。工具肯定可以翻译,但做分析是另一回事 - AJ

【讨论】:

  • 我遇到了类似的问题,我必须通过修复命名空间来解决。
【解决方案2】:

这表明您的 WSDL 或您的客户端不正确。客户端应该无法从 WSDL 中得知它是用什么语言实现的。请检查您的命名空间。

SOAP UI 是一个非常好的测试 SOAP 服务的工具。我推荐它来解决这个问题。

在我看来,好像有什么东西试图逃离那个 sn-p。你不想要&amp;gt; 你想要&gt;

您需要确保服务和客户端使用相同的命名空间。在这里沟通是最重要的。

【讨论】:

  • 非常感谢!我正在检查 Fiddler,它显示响应已正确发回,但由于某种原因,.NET 无法处理响应并始终返回 null。
  • 请阅读我的更新回复!我在 .NET 项目中的一个 svcinfo xml 文件中发现了一些奇怪的代码。
猜你喜欢
  • 2012-07-24
  • 1970-01-01
  • 2012-04-07
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多