使用Custom MessageEncoder时,为什么缺少soap标头

时间:2016-05-28 06:12:47

标签: wcf soap compression

我正在创建一个类似于WCF示例项目中的自定义消息编码器(WF_WCF_Samples \ WCF \ Extensibility \ MessageEncoder \ Compression)。

我遇到的问题是在发送请求时,使用没有压缩的默认textMessageEncoder会在编码后生成此请求。

enter image description here

但是,当我使用gzip压缩的自定义编码器并从soapUI发送请求时,这就是我得到的。

enter image description here

如您所见,缺少操作。它最终给了我这个例外。

The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 

可以通过在MessageEncoder

中手动添加以下内容来解决此问题
message.Headers.To = new Uri("http://localhost:19860/Service1.svc");
message.Headers.Action = @"http://tempuri.org/IService1/GetData";

所以我的问题是为什么会发生这种情况?为什么我在使用自定义MessageEncoder时错过了我的标题,即使我只是使用内部编码器来创建消息?

这是完整的解决方案。要测试它,你只需要肥皂ui并发送请求到http://localhost:19860/Service1.svc

https://github.com/janmchan/WCFCompression

1 个答案:

答案 0 :(得分:0)

终于找到了问题。这似乎是WCF上的一个错误。 SoapHeaders中的Action和To不应该在Soap 1.2上真正需要,但由于某些原因,即使使用该版本,我仍然只在使用自定义MessageEncoder时才会遇到此问题,即使我只是调用内部编码器的ReadMessage。解决方案也非常令人困惑。正如错误消息所示,Action与soap操作不匹配,所以我只需要添加标头SOAPAction,即使它是空白的。

以下是帮我找到解决方案的帖子。

WCF - SOAP Action mismatch error while testing with SoapUI