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

我对如何在WCF(以及其他Web服务框架)中实现SOAPAction感到困惑。

在测试客户端中,我有一个客户端消息检查器,配置为同时获取SOAP消息和随请求一起发送的任何HTTP头。 至少在客户端消息检查器中,该操作显示为SOAP标头中的元素:

 http://myurl.com/2009/11/MyService/MyMethod 

但是,如果我在Fiddler中查看请求,则缺少Action元素,而现在HTTP Headers中还有一个附加条目:

 SOAPAction: "http://myurl.com/2009/11/MyService/MyMethod" 

谁能解释一下到底发生了什么?

谢谢!

这是WCF不遵守标准的问题。

SOAP 1.1使用SOAPAction标头来决定调用哪种方法,但由于方法名称嵌入在消息的其他位置,因此这有点混乱。 SOAP 1.2解决了这个问题,并将操作添加到content-type标头,并弃用了SOAPAction标头(尽管现在它仍然是那些仍想发送它的客户端的可选项)。

有关详细信息,请参阅o’reilly博客页面。

您可能会看到SOAP 1.1和SOAP 1.2之间的区别。

在我看来好像这两个是等价的,不是吗? 我猜Fiddler只是解释了SOAP标题“”,称之为“SOAPAction”。 价值看起来是一样的,不是吗?

从客户端消息检查器获得的是原始XML数据(SOAP消息的原始格式),它穿过铜线(或光纤)。 我想说,Fiddler给你的是对同一XML消息的更高级别的面向HTTP的解释。

从我在Fiddler和SOAP上发现的其他博客文章和文章来看(例如这篇博客文章 – 最后查看“Sample Capture”部分),在我看来,似乎Fiddler将剥离SOAP头并解释/以自定义格式显示它们,只留下SOAP正文显示为正在显示的消息正文。

有实际的技术问题吗? 或者只是如何解释这两种格式的问题?

将SOAP操作放在HTTP头中是SOA规范的一部分,WCF在这种情况下只实现了SOAP规范。

在这里阅读: http : //www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528