WCF OutgoingMessageHeaders不保存值

2 wcf

我正在尝试将MessageHeader写入OutgoingMessageHeaders,但值不会粘.

BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1003/Client.svc");

IClientService serviceClient = new ChannelFactory<IClientService>(basicHttpBinding, endpointAddress).CreateChannel();

// attempt 1
using (OperationContextScope scope = new OperationContextScope(serviceClient as IContextChannel)) 
{
    OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId","","ABC"));
}

// attempt 2
using (OperationContextScope scope = new OperationContextScope(serviceClient as IContextChannel)) 
{
    OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId","","ABC"));
}
Run Code Online (Sandbox Code Playgroud)

好的,你可以看到我正在设置两次OutgoingMessageHeaders,但这只是为了证明一点.在第二次尝试中,在我进行实际添加之前,我检查了OperationContext.Current.OutgoingMessageHeaders.我希望这有一个条目.但它是零.一旦它离开使用范围,该值就会丢失.

当它流向服务器时,它表示无法找到消息头,表示只要有关它尚未保存.

为什么我的MessageHeader不坚持?

杰夫

Mau*_*ice 8

using块的结尾调用dispose并重置之前的OperationContext.

因此,您需要使用OperationContextScope内部的服务调用.

        using (OperationContextScope scope = new OperationContextScope(serviceClient as IContextChannel))
        {
            OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId", "", "ABC"));
            serviceClient.CallOperation();
        }
Run Code Online (Sandbox Code Playgroud)