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 肥皂操作?的主要内容,如果未能解决你的问题,请参考以下文章