我对如何在WCF(以及其他Web服务框架)中实现SOAPAction感到困惑。
在测试客户端中,我有一个Client Message Inspector,它配置为同时获取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"
任何人都可以解释发生了什么事吗?
谢谢!
答案 0 :(得分:15)
这是WCF不符合标准的问题。
SOAP 1.1使用SOAPAction标头来决定调用哪种方法,但由于方法名称嵌入在消息的其他位置,因此这有点混乱。 SOAP 1.2解决了这个问题,并将操作添加到content-type标头,并弃用了SOAPAction标头(尽管现在它仍然是那些仍想发送它的客户端的选项)。
有关详细信息,请参阅o'reilly博客页面。
答案 1 :(得分:4)
您可能会看到SOAP 1.1和SOAP 1.2之间的区别。
答案 2 :(得分:3)
对我来说好像这两个是等价的,不是吗?我猜Fiddler只是解释SOAP标头“”,称之为“SOAPAction”。价值看起来是一样的,不是吗?
从客户端消息检查器获得的是原始XML数据(SOAP消息的原始格式),它穿过铜线(或光纤)。我想说,Fiddler给你的是对同一XML消息的更高级别的面向HTTP的解释。
从我在Fiddler和SOAP上找到的其他博客文章和文章(例如this blog post)来看 - 在结尾处查看“样本捕获”部分),我觉得好像Fiddler会脱光SOAP标头并以自定义格式解释/显示它们,只留下SOAP主体显示为正在显示的消息的主体。
是否存在实际技术问题?或者只是如何解释这两种格式的问题?
答案 3 :(得分:0)
将SOAP操作放在HTTP标头中是SOA规范的一部分,在这种情况下,WCF只是实现了SOAP规范。
请在此处阅读:http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528