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不坚持?
杰夫
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)