Java 如何设置标题元素";mustunderstand=0“;进入具有BasicHttpBinding和BasicHttpSecurityMode.TransportWithCredential的soap请求:

Java 如何设置标题元素";mustunderstand=0“;进入具有BasicHttpBinding和BasicHttpSecurityMode.TransportWithCredential的soap请求:,java,c#,web-services,wcf,certificate,Java,C#,Web Services,Wcf,Certificate,我正在使用带有C#的.NET WCF客户端来使用Java Web服务。当我向此web服务发送请求时,封装的WCF客户端始终放置元素mustunderstand=1,即使使用实现IClientMessageInspector的自定义MessageInspector来更改方法IClientMessageInspector.BeforeSendRequest中的头元素。我猜带有BasicHttpSecurityMode.TrasportWithCredentials的BasicHttpBinding总

我正在使用带有C#的.NET WCF客户端来使用Java Web服务。当我向此web服务发送请求时,封装的WCF客户端始终放置元素
mustunderstand=1
,即使使用实现
IClientMessageInspector
的自定义MessageInspector来更改方法
IClientMessageInspector.BeforeSendRequest
中的头元素。我猜带有BasicHttpSecurityMode.TrasportWithCredentials的BasicHttpBinding总是将此元素放在请求的头中,而忽略这些手动添加的头

这个
mustunderstand=1
头元素在服务器端触发了一个错误,并且这个服务器超出了我们的控制范围。我希望避免将
mustunderstand=1
的值更改为
mustunderstand=0
时出现此标题元素响应错误

因此,有一个技巧或技巧可以更改此
mustunderstand
标题参数的值

要演示,请查看FIDDLER和MessageInspector跟踪的请求原始、响应原始

原始请求:

POST“WSDLADDRESS”HTTP/1.1
MIME版本:1.0
内容类型:多部分/相关;type=“应用程序/xop+xml”;start=“”;边界=“uuid:a0f5ee5b-4543-4aa9-85be-f7af4e8ea289+id=1”;start info=“text/xml”
SOAPAction:“SOAPAction的名称”
主持人:wwwh.cnj.jus.br
内容长度:5013
预期:100人继续
接受编码:gzip,deflate
连接:保持活力
--uuid:a0f5ee5b-4543-4aa9-85be-f7af4e8ea289+id=1
内容ID:
内容传输编码:8比特
内容类型:应用程序/xop+xml;字符集=utf-8;type=“text/xml”
【参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考答案1 1 1 1(参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考答案1 1)1 1 1 1 1 1 1 1(参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考1 1 1 1 1 1 1)1 1 1 1 1 1 1 1 1 1 1 1 1 1 1。参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考LICQWJMUP+G6AZGLIVTQBGUE3ETwdVQIogmHChfeAtHCD9Knid4Bndyldq0WoTWzGJZ9PL8PXZJIMzQtYLP+XG/EMAB3B3BP1G==01/09/2014
--uuid:a0f5ee5b-4543-4aa9-85be-f7af4e8ea289+id=1
内容ID:
内容传输编码:二进制
内容类型:应用程序/八位字节流
0��0�πZN�(K)��20�    ���j0
*�H��
�0o1
0 UBR10U
(…证书数据…)

�����20�W�|� ������#�D�E�Z9�碘化钾��L����ɵ�v���灵魂�����Q�晚=]�ht���L�T�x�7好的……这需要一些工作才能正确。我不知道您是否熟悉绑定中的通道堆栈,但基本上,消息将在WCF中流动,每个通道都将以某种方式转换消息

,并且您需要使用自定义消息编码器,因为在您修改了头以删除
mustUnderstand
属性后,WCF将应用“正确”的头(正如它所看到的,由于指定的绑定)


这是一个相当复杂的领域,我必须使用它来获得由WCF生成的SOAP头,以符合WSE 3.0用来创建的东西,在安全头中有一个二进制标记;但是经过一些尝试和错误,这是一个非常强大的功能。

你能展示你的
MessageInspector
实现吗?Hy@barrick,好的!我在但是,即使手动添加头,wcf生成的客户端也会忽略“false”参数,并将“mustunderstand=1”元素放在头中。我明白了。如果在
request.Headers.RemoveAt(0)之后放置断点
method call,此时您的消息是否具有所需的头?是的,在这一点之后,属性MustUnderstand为“false”,因此请求的头应该为“MustUnderstand=0”。我添加了一些图片来说明这一点。