为什么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文件中创建自定义绑定: