HTTP标头或SOAP标头中的WCF Soap操作?

时间:2010-01-26 20:00:21

标签: c# wcf soap

我对如何在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"

任何人都可以解释发生了什么事吗?

谢谢!

4 个答案:

答案 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