从.NET使用Java Web Service

时间:2010-10-26 13:53:57

标签: java .net web-services

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

更新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服务引用,我将再次遇到相同的问题,因为命名空间将被更新。解决这个问题的好方法是什么?我能想到的唯一解决方案是要求webservice的创建者使用正确的命名空间。

2 个答案:

答案 0 :(得分:4)

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

服务参考 - 这是一种调用Microsoft WCF Web Services 3.5及更高版本的专用方法。 Web服务参考 - 引用非Microsoft Web服务和Microsoft Web服务的较低版本(如2.0)的方式

我们也可以在非Microsoft Web服务中使用Service引用,我们只需要在app.config中修改一些配置,例如Security Configurations()

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

(这是由代理命名空间预期响应与实际xml命名空间webservice响应之间的差异引起的)

样品: 代理商代码 [return:System.Xml.Serialization.XmlElementAttribute(“GetResponse”,Namespace =“ http://AJ_TUASON.COM ”)]

Public 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的代理类中:

样品: [return:System.Xml.Serialization.XmlElementAttribute(“GetResponse”,Namespace =“ http://AJTUASON.COM ”)] 公共GetResponse Get() {}

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

这将解决Null问题。

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

答案 1 :(得分:2)

它向我建议您的WSDL或您的客户端是不正确的。客户端不应该从WSDL告诉它实现了什么语言。检查命名空间。

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

让我觉得有些东西试图逃脱那个片段。您不希望&gt;想要>

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