HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?

Posted

技术标签:

【中文标题】HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?【英文标题】:WCF Soap Actions in HTTP header or SOAP header? 【发布时间】: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"

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

谢谢!

【问题讨论】:

【参考方案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。

以上是关于HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?的主要内容,如果未能解决你的问题,请参考以下文章

读取 SOAP 消息头 WCF

在现有 WCF SOAP 服务中添加 Http 标头不起作用

如何将 HTTP 标头添加到 SOAP 客户端

WCF - Soap 标头在安全元素中引用命名空间两次

在 Wcf 自定义发送端口上生成 SOAP 操作标头

通过身份验证标头 API WCF Soap C# .Net