【问题标题】:Switching between .Net Webservice and Java Webservice by changing URL通过更改 URL 在 .Net Webservice 和 Java Webservice 之间切换
【发布时间】:2012-06-19 12:20:51
【问题描述】:

情况是这样的。我从某人那里收到了一个由 Apache/Tomcat 服务器 (Java) 生成的 WSDL(包括 XSD)。我为其做项目的公司更喜欢 .NET,所以我使用 wsdl.exe 生成部分类并创建了 Web 服务。

然后我创建了一个 .NET 客户端(在本例中我使用的是 VB.NET),它具有对 java wsdl 的 Web 引用。这工作正常。然后我使用代码更改 url 并使其指向我新创建的 .NET 服务,但我似乎无法让它工作。 反过来做,好像也没用。

对命名空间和服务名称进行了一些调整,但似乎无法破解它。不断给我一个关于 HTTP 标头无法找到的错误。作为一种方法。这表明存在传输问题。

我真的不想回到计划 B,即创建 Java Web 服务,然后将其链接到 .NET 环境。我知道这会起作用,因为您永远不必更改网址。

有什么建议吗?

【问题讨论】:

  • 请做更多研究(或向“某人”提问)。 Tomcat 无法生成任何 wsdl 文件。框架,如axis、axis2、cfengine、metro。 . .去做。使用的肥皂版本是什么(1.1 或 1.2)?使用哪种编码(rpc/encoded、document/literal ......)?最后但同样重要的是:在“错误”方面更加具体。这里的人不太喜欢胡乱猜测。 . .
  • 问题非常具体:是否可以将 1 个客户端存根链接到生成的 java(可能是 axis2)和 .NET(C# 版本 2 或更高版本)而不重新生成存根,而是通过只需更改网址。使用什么肥皂版本并不重要,因为 .NET 客户端支持您提到的两者。我对 asmx 文件的名称或命名空间或操作名称是否存在任何问题感兴趣。
  • 连接到 .net Web 服务时遇到的确切错误:System.Web.Services.Protocols.SoapException: Server did not identify the value of HTTP Header SOAPAction: 。在 System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() 在 System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage 消息) 在 System.Web.Services.Protocols.SoapServerProtocol.Initialize() 在 System.Web.Services .Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) at System.Web.Se......
  • 我在使用 JAX-WS 和 soap 动作标头时遇到了问题 - 您使用的是 JAX-WS 来拨打电话吗?
  • 不,我使用的是 .NET 客户端。 Java 服务器(我检查过)是 JAX_WS。

标签: java .net web-services client stubs


【解决方案1】:

所以总结一下你有:
服务器端:java,WSDL:java 生成
.NET 客户端 -> java 服务器 - WORKS .NET 客户端 -> .NET 服务器 -> 失败

如果是这样的话,这与 Java 没有太大关系!
但我确实知道,正如我之前提到的那样,.NET 服务器对肥皂操作标头很挑剔。
您的 WSDL 中是否有 soapAction?
如果是这样,您需要发送该值,但我不知道如何在 .NET 中执行此操作(Google 将成为您的朋友)。
如果没有,请查看此问题中的 cmets,了解如何确定所需的肥皂动作标头值:stackoverflow.com/questions/2262781/soap-action-wsdl

【讨论】:

  • 谢谢。你的回答给了我一个不同的搜索角度。不是答案,但非常有帮助。想给你一些积分 - 如果只是为了正常回答而不是其他人 - 但不知道如何接受答案。
  • 没问题,也谢谢。找到解决方案做得很好,看起来像 .NET 的一个怪癖?
【解决方案2】:

在通过 devine 知识库 (Google) 进行一些搜索后,我设法解决了这个问题。

除了在指定端口名时非常小心(默认端口名并不总是需要的,因此您需要覆盖它),但最重要的是,我发现添加了

作为 asm 类标题的一部分解决了我的问题。现在我需要做的就是找出原因?

但相信我,它有效...

I found the solution here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多