如何将http头添加到WCF通道

如何将http头添加到WCF通道,wcf,wcf-binding,wcf-security,Wcf,Wcf Binding,Wcf Security,我有一个调用WCF服务的MVC客户端。MVC客户端需要在httprequest中传递一个自定义头。MVC客户机也在使用Unity for DI 我已经通过了和其他链接,但他们都建议使用消息检查器和自定义行为(这可能是正确的方法),但我正在寻找快速和肮脏的方式,因为这将是临时解决方案 // Unity type Registration public static void RegisterTypes(IUnityContainer container) {

我有一个调用WCF服务的MVC客户端。MVC客户端需要在httprequest中传递一个自定义头。MVC客户机也在使用Unity for DI

我已经通过了和其他链接,但他们都建议使用消息检查器和自定义行为(这可能是正确的方法),但我正在寻找快速和肮脏的方式,因为这将是临时解决方案

    // Unity type Registration
    public static void RegisterTypes(IUnityContainer container)
    {
       container.RegisterType<IDocumentManagementChannel>(new PerRequestLifetimeManager(),
            new InjectionFactory(f=> CreateDocumentManagementChannel()));
    }

    private static IDocumentManagementChannel CreateDocumentManagementChannel()
    {

        var factory = new ChannelFactory<IDocumentManagementChannel>("BasicHttpEndPoint");
        var channel =  factory.CreateChannel();

        // How do i add HttpHeaders into channel here?

        return channel
    }
//统一类型注册
公共静态无效注册表类型(IUnityContainer容器)
{
container.RegisterType(新PerRequestLifetimeManager(),
新的InjectionFactory(f=>CreateDocumentManagementChannel());
}
私有静态IDocumentManagementChannel CreateDocumentManagementChannel()
{
var工厂=新的ChannelFactory(“BasicHttpEndPoint”);
var channel=factory.CreateChannel();
//如何将HttpHeader添加到此处的通道中?
返回通道
}

在上面的代码中,如何在创建频道后添加自定义标头?

1-下面的代码应该从MVC发送soap标头

            string userName = Thread.CurrentPrincipal.Identity.Name;
            MessageHeader<string> header = new MessageHeader<string>(userName);               

            OperationContext.Current.OutgoingMessageHeaders.Add(
                                      header.GetUntypedHeader("String", "System"));
string userName=Thread.CurrentPrincipal.Identity.Name;
MessageHeader=newmessageheader(用户名);
OperationContext.Current.OutgoingMessageHeaders.Add(
header.GetUntypedHeader(“字符串”、“系统”);
2-此代码应在WCF上读取

  string loginName = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("String", "System");
string loginName=OperationContext.Current.IncomingMessageHeaders.GetHeader(“字符串”、“系统”);
3-对于频道,我建议您创建自定义System.ServiceModel.ClientBase,如下所示:

public abstract class UserClientBase<T> : ClientBase<T> where T : class
    {
        public UserClientBase()
        {
            string userName = Thread.CurrentPrincipal.Identity.Name;
            MessageHeader<string> header = new MessageHeader<string>(userName);

            OperationContext.Current.OutgoingMessageHeaders.Add(
                                      header.GetUntypedHeader("String", "System"));
        }
    }
公共抽象类UserClientBase:ClientBase其中T:class
{
公共用户clientbase()
{
字符串用户名=Thread.CurrentPrincipal.Identity.Name;
MessageHeader=newmessageheader(用户名);
OperationContext.Current.OutgoingMessageHeaders.Add(
header.GetUntypedHeader(“字符串”、“系统”);
}
}
4-创建一个从UserClientBase继承的自定义客户端类,并在内部使用基本通道来调用IxxService,它是此处的T