我有一个用Java编写的Web服务,现在我想在.NET世界中使用该Web服务。我使用WSDL向我的.NET应用程序添加代理类,但是当我调用Java Web服务方法时,响应始终为null。有谁熟悉这个问题?
更新1:
我注意到的另一件事是我打开了一个svcinfo文件并找到了以下代码:
<endpoint normalizedDigest="<?xml version="1.0" encoding="utf-16"?><Data address="http://fff.mywebserive/somewebservie" binding="basicHttpBinding" bindingConfiguration="DOC_TOI_Binding" contract="ServiceReference1.DOC_TOI_PortType" name="DOC_TOI_Port" />" digest="<?xml version="1.0" encoding="utf-16"?><Data
这对我来说不合适!
更新2:解决方案(种类)
问题是响应的名称空间与客户端代理类使用的名称空间不同。这样,对象永远不会正确反序列化。有一次,我更改了命名空间以匹配它正常工作的响应命名空间。但是现在如果我更新Web服务引用,我将再次遇到相同的问题,因为命名空间将被更新。解决这个问题的好方法是什么?我能想到的唯一解决方案是要求webservice的创建者使用正确的命名空间。
答案 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服务的工具。我推荐它来解决这个问题。
让我觉得有些东西试图逃脱那个片段。您不希望>
想要>
您需要确保服务和客户端使用相同的命名空间。沟通在这里至关重要。