我想创建以下内容
<soapenv:Header>
<wsse:Security>
<wsse:BinarySecurityToken EncodingType="XXXX" ValueType="XXX">Token
</wsse:BinarySecurityToken>
</wsse:Security>
</soapenv:Header>
我设法通过使用下面的代码来实现这一点,该代码可以正常工作(很好!)
using (new OperationContextScope(experianProxy.InnerChannel))
{
DataContractJsonSerializer serializer =new
DataContractJsonSerializer(typeof(BinarySecurityToken));
MessageHeader header = MessageHeader.CreateHeader("wsse:Security", "",
_token,serializer);
OperationContext.Current.OutgoingMessageHeaders.Add(header);
var interactiveResponse = experianProxy.InteractiveAsync(new Root()).Result;
return interactiveResponse.OutputRoot.ToString();
}
和
[XmlRoot(ElementName = "wsse:BinarySecurityToken", Namespace = "")]
public sealed class BinarySecurityToken : IXmlSerializable
{...}
现在发出的请求是
<soapenv:Header>
<wsse:Security><wsse_x003A_BinarySecurityToken ValueType="xxxx"
EncodingType="wsse:Base64Binary"
>XXXXXXXXXXX</wsse_x003A_BinarySecurityToken>
</wsse:Security>
</soapenv:Header>
转换cdata没有帮助。
有人可以指出我想念的是什么吗?非常感谢您的帮助。
谢谢。
答案 0 :(得分:0)
OperationContextScope的范围仅在using语句内有效。释放OperationContextScope实例后,将还原OperationContext,并且消息头不再有效。如果您尝试在using语句中调用该方法,则会找到您的custome标头。
如果要向请求中永久添加消息头,则可以使用IClientMessageInspector接口。