【问题标题】:WCF Soap Actions in HTTP header or SOAP header?HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?
【发布时间】:2011-01-09 16:14:24
【问题描述】:

我对如何在 WCF(以及其他 Web 服务框架)中实现 SOAPAction 感到有些困惑。

在一个测试客户端中,我有一个客户端消息检查器配置为抓取 SOAP 消息和随请求一起发送的任何 HTTP 标头。至少在客户端消息检查器中,该操作显示为 SOAP 标头中的一个元素:

<s:Header>
    <Action ... >http://myurl.com/2009/11/MyService/MyMethod</Action>

但是,如果我在 Fiddler 中查看请求,Action 元素会丢失,而现在 HTTP 标头中有一个附加条目:

SOAPAction: "http://myurl.com/2009/11/MyService/MyMethod"

谁能解释到底是怎么回事?

谢谢!

【问题讨论】:

    标签: c# wcf soap


    【解决方案1】:

    这是 WCF 不符合标准的问题。

    SOAP 1.1 使用 SOAPAction 标头来决定调用什么方法,但这有点混乱,因为方法名称嵌入在消息的其他位置。 SOAP 1.2 解决了这个问题并将操作添加到内容类型标头,并弃用了 SOAPAction 标头(尽管它现在对于那些仍想发送它的客户端是可选的)。

    有关详细信息,请参阅 o'reilly 博客页面。

    【讨论】:

      【解决方案2】:

      您可能会看到 SOAP 1.1 和 SOAP 1.2 之间的区别。

      【讨论】:

        【解决方案3】:

        在我看来这两者是等价的,不是吗?我猜 Fiddler 只是解释了那个 SOAP 头“”,称之为“SOAPAction”。价值似乎是一样的,不是吗?

        您从客户端消息检查器获得的是原始 XML 数据(SOAP 消息的原始格式),因为它通过铜线(或光纤)传输。 Fiddler 为您提供的是对同一 XML 消息的更高级别的面向 HTTP 的解释,我想说。

        从我在 Fiddler 和 SOAP 上找到的其他博客文章和文章来看(例如 this blog post - 查看最后的“样本捕获”部分),在我看来,Fiddler 似乎会去掉 SOAP标头并以自定义格式解释/显示它们,只留下 SOAP 正文显示为正在显示的消息的正文。

        是否存在实际的技术问题?还是只是如何解释这两种格式的问题?

        【讨论】:

        • 它们可能是等价的。这不是一个真正的技术问题,但我的消息检查员告诉我一件事有点令人困惑,但实际发出的消息却不同。此外,服务提供商还验证了 Fiddler 是正确的,而我的消息检查员没有给我真正的传出请求。我希望有人能解释为什么会发生这种行为。
        【解决方案4】:

        将 SOAP 操作放在 HTTP 标头中是 SOA 规范的一部分,而 WCF 在这种情况下只是实现了 SOAP 规范。

        在这里阅读:http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

        【讨论】:

        • -1:不,SOAPAction HTTP 标头是 SOAP 1.1 的一部分。另一个是 SOAP 1.2。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 2019-09-05
        相关资源
        最近更新 更多