【问题标题】:Can a .NET 2.0 Web Service handle a call from a client when the SoapAction is missing?当 SoapAction 丢失时,.NET 2.0 Web 服务能否处理来自客户端的调用?
【发布时间】:2010-07-14 00:17:20
【问题描述】:

我们有一个 .NET 2.0 Web 服务(.ASMX 文件)。 Java 客户端正在调用此 Web 服务,但它们没有传入 SoapAction 标头。

这会导致我们的 Web 服务失败并出现错误::“服务器无法识别 HTTP Header SOAPAction 的值:。”

我无法说服负责调用 Java 客户端的开发团队包含 SoapAction 标头。

有没有办法解决我的这个问题?

当 SoapAction 丢失时,我能否阻止 .NET 引发此错误?我可以以编程方式将调用定向到正确的 WebMethod 吗?

类似这样的伪代码,

if (Header.SoapAction == String.Empty) then MyWebMethod();

【问题讨论】:

    标签: java .net web-services soap


    【解决方案1】:

    根据 SOAP 1.1 规范,这是 HTTP 客户端所要求的。

    6.1 SOAP HTTP 请求

    虽然 SOAP 可能用于 与多种HTTP结合 请求方法,仅此绑定 在 HTTP POST 请求中定义 SOAP (请参阅第 7 节了解如何使用 SOAP RPC 和第 6.3 节了解如何使用 HTTP 扩展框架)。

    6.1.1 SOAPAction HTTP 标头字段

    SOAPAction HTTP 请求标头 字段可用于指示 SOAP HTTP 请求的意图。这 value 是标识意图的 URI。 SOAP 对 URI 的格式或特殊性,或 它是可解决的。 HTTP 客户端 必须使用这个头域 发出 SOAP HTTP 请求。

    来源http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

    从快速的 Google 看来,这似乎是 Java 和 Axis 的常见问题,但是否需要这样做存在一些争议。这能否帮助您说服 Java 开发人员他们需要实现标头?

    编辑:

    SoapAction http 标头的正确 URI 在 WSDL 文档中定义。

    转到http://mydomain.com/myservice.asmx?wsdl

    为你正在调用的方法寻找 wsdl:operation 元素,它应该有一个子元素 soap:operation,它有一个名为 soapaction 的属性,其中的 URI 就是你应该使用的那个。在我测试的 web 服务中,它看起来像命名空间后跟 / 和方法名称如下。

    <wsdl:operation name="AddTwoNumbers">
      <soap:operation soapAction="http://mydomain.com/myservice/AddTwoNumbers" style="document"/>
    

    【讨论】:

    • 感谢您的帮助,克里斯。同一份文档说,“空字符串 ("") 的标头字段值意味着 SOAP 消息的意图是由 HTTP Request-URI 提供的。他们发送的标头确实有一个 SoapAction 字段,但它被设置为一个空字符串 ("")。所以也许我刚刚给了他们错误的 HTTP Request-URI?现在他们要去mydomain.com/myservice.asmx。对于名为 MyWebMethod 的 WebMethod,正确的 HTTP 请求 URI 是什么?
    • 我已经为您编辑了帖子。在您的情况下,HTTP 请求 URI 指向 ASMX 文件而不是方法,因此我假设您不能将其保留为空字符串。
    猜你喜欢
    • 2011-09-10
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2014-09-04
    • 2011-04-25
    相关资源
    最近更新 更多