如何在请求标头(.net核心)中附加BinarySecurityToken

时间:2018-10-03 08:43:42

标签: wcf .net-core

我想创建以下内容

<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>&lt;wsse_x003A_BinarySecurityToken ValueType="xxxx" 
EncodingType="wsse:Base64Binary"
&gt;XXXXXXXXXXX&lt;/wsse_x003A_BinarySecurityToken&gt;
</wsse:Security>
</soapenv:Header>

转换cdata没有帮助。

有人可以指出我想念的是什么吗?非常感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

OperationContextScope的范围仅在using语句内有效。释放OperationContextScope实例后,将还原OperationContext,并且消息头不再有效。如果您尝试在using语句中调用该方法,则会找到您的custome标头。

如果要向请求中永久添加消息头,则可以使用IClientMessageInspector接口。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f1f29779-0121-4499-a2bc-63ffe8025b21/wcf-security-soap-header