WCF中的Soap Actions是放在HTTP头还是SOAP头中?

14

我对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"

有人能解释一下到底发生了什么吗??

谢谢!

4个回答

17

这是WCF未遵循标准的问题。

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

请参阅o'reilly博客页面获取更多详细信息。


5

很可能你正在看到SOAP 1.1和SOAP 1.2之间的区别。


3
似乎这两个是等价的,是吗?我想Fiddler只是解释了那个SOAP头部“”,称其为“SOAPAction”。该值似乎是相同的,对吧?
客户端消息检查器显示的是原始XML数据(SOAP消息的原始格式),它通过铜线(或光纤)传输。而Fiddler提供的是同一XML消息的更高级别的基于HTTP的解释,我想说。
从我在Fiddler和SOAP方面找到的其他博客文章和文章来看(例如,查看末尾的“示例捕获”部分的这篇博客文章),似乎Fiddler将剥离SOAP头并以自定义格式解释/显示它们,仅留下SOAP主体作为所显示的消息的正文。
是否存在实际的技术问题?还是只是如何解释这两种格式的问题?

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

0

3
不,SOAPAction HTTP 头是 SOAP 1.1 的一部分,另一个是 SOAP 1.2。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接