I need to add a Request Header to a WCF Request when using ConfigurationChannelFactory.CreateChannel.
I have already tried using OperationContextScope.
I have a function which is as shown below:
    public O Execute<O>(Func<T, O> action, string configFilePath, string endpoint, StringDictionary headers)
    {
        bool closed = false;
        T channel = default(T);
        O output = default(O);
        try
        {
            channel = this.GetChannel(configFilePath, endpoint);
            if (headers != null && headers.Count > 0)
            {
                (channel as IClientChannel).Open();
                using (new OperationContextScope(channel as IClientChannel))
                {
                    HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
                    foreach (DictionaryEntry header in headers)
                    {
                        requestMessage.Headers[header.Key.ToString()] = header.Value.ToString();
                    }
                    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
                    output = action(channel);
                }
                (channel as IClientChannel).Close();
            }
            else
            {
                (channel as IClientChannel).Open();
                output = action(channel);
                (channel as IClientChannel).Close();
            }
            closed = true;
        }
        finally
        {
            if (!closed && channel != null)
            {
                (channel as IClientChannel).Abort();
            }
        }
        return output;
    }
    private T GetChannel(string configFilePath, string endpoint)
    {
        //Get the ChannelFactoryObject
        ConfigurationChannelFactory<T> wcfClientFactory = null;
        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFilePath };
        wcfClientFactory = new ConfigurationChannelFactory<T>(endpoint, ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None), null); 
        return wcfClientFactory.CreateChannel();
    }
Configuration file entry:
<security mode="Transport">
   <transport clientCredentialType="None" proxyCredentialType="None" realm="" />;clientCredentialType="Windows" negotiateServiceCredential="true" />
</security>
The above function is called from another .cs file, as shown below, passing Func<T,O> as an argument:
Execute<MyService.InformationResponse[]>=>IMyService.GetInformation(Request), ConfigPath, myServiceEndPoint, headers);
I am getting 400, BadRequest as the Service is expecting "Authorization" in the Request header, which it is not able to find.
