为什么wsa:WCF删除了我的回复邮件中的标题?

我有一个带有IDispatchMessageInspector的WCF服务和一个修改消息的WS-Addressing头的BeforeSendReply方法。 这适用于所有标题,除了wsa:To,它正从回复中删除…

 public void BeforeSendReply(ref Message reply, object correlationState) { reply.Headers.To = new Uri("urn:something:something:something"); // Why won't this show up in the response? reply.Headers.From = new EndpointAddress("urn:blabla:blabla"); reply.Headers.MessageId = MessageIDHelper.CreateNew(); reply.Headers.ReplyTo = new EndpointAddress(Definitions.WSA_REPLYTO_ANONYMOUS); reply.Headers.Action = Definitions.WSA_ACTION_SOMETHING_SOMETHING; } 

这导致:

   http://xxx.xx/xxx/Messages/1/Send SOME_ID_WHATEVER  urn:xxx.xx:xxx:xxx  urn:uuid:083b5fb7-ff45-4944-b881-b4c590577408  http://www.w3.org/2005/08/addressing/anonymous   ...  

即使result.ToString() (result = Message type)给了我:

   http://xxx.xx/xxx/Messages/1/Send SOME_ID_WHATEVER urn:xxx.xx:xxx:xxx  urn:xxx.xx:xxx:xxx  urn:uuid:083b5fb7-ff45-4944-b881-b4c590577408  http://www.w3.org/2005/08/addressing/anonymous   ...  

所以…为什么wsa:To标题从我的回复中剥离了?

TransportBindingElement.ManualAddressing属性的文档提供了有关寻址行为的一些信息。 即,如果ManuelAddressing的值设置为false,则发送通道将在通道上配置为To:addressee的EndpointAddress应用于传出消息。 这意味着通道在To:标头的值中有一个谚语。

现在, BeforeSendReply()在将消息传递到通道进行传输之前,修改服务级别的消息内容。 因此,如果ManuelAddressing的值为false,则通道将在消息头中设置其自己的To:值。

只要ManuelAddressing的值设置为true,通道就会假定消息已经被解决,并且不会添加任何其他信息。 要将ManuelAddressing设置为True,可以在web.config文件中创建自定义绑定: