Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Autofac服务注册期间修改WCF端点行为_C#_Wcf_Cookies_Autofac - Fatal编程技术网

C# 在Autofac服务注册期间修改WCF端点行为

C# 在Autofac服务注册期间修改WCF端点行为,c#,wcf,cookies,autofac,C#,Wcf,Cookies,Autofac,当从客户端代理向我们的每个WCF服务方法发出请求时,我们需要发送一个身份验证cookie。创建cookie的代码工作正常,但我正在尝试修改Autofac服务注册代码,以添加新的端点行为,从而将cookie添加到请求头。我使用Fiddler作为代理来查看cookie是否添加到请求中 以下是迄今为止我所掌握的,但不起作用: private static void RegisterService<TService>(ContainerBuilder builder) { bui

当从客户端代理向我们的每个WCF服务方法发出请求时,我们需要发送一个身份验证cookie。创建cookie的代码工作正常,但我正在尝试修改Autofac服务注册代码,以添加新的端点行为,从而将cookie添加到请求头。我使用Fiddler作为代理来查看cookie是否添加到请求中

以下是迄今为止我所掌握的,但不起作用:

private static void RegisterService<TService>(ContainerBuilder builder) 
{ 
    builder.Register(c => new ChannelFactory<TService>(string.Format("BasicHttpBinding_{0}", typeof(TService).Name))).SingleInstance();  

    builder.Register(c => 
    { 
        var channel = c.Resolve<ChannelFactory<TService>>(); 
        if (!channel.Endpoint.Behaviors.Contains(typeof(SamsTrustBehaviour))) 
        { 
            channel.Endpoint.Behaviors.Add(new SamsTrustBehaviour()); 
        } 

        return channel.CreateChannel(); 
    }).UseWcfSafeRelease(); 
}
因此,似乎添加到
ClientBase.Endpoint
有效,而添加到
ChannelFactory.Endpoint
无效


是否有一种方法可以在注册期间向WCF通道端点添加行为,该行为会一直持续到客户机代理发出请求为止?

我最近遇到了同样的问题。下面是我使用的基于AutoFac文档的解决方案

        containerBuilder.Register(s =>
        {
            var factory = s.Resolve<ChannelFactory<IService>>();
            factory.Opening +=
                (sender, args) =>
                    factory.Endpoint.Behaviors.Add(new SamsTrustBehaviour());
            return factory.CreateChannel();
        });
containerBuilder.Register(s=>
{
var factory=s.Resolve();
工厂,开业+=
(发送方,args)=>
添加(新的samstrustbehavior());
返回factory.CreateChannel();
});
我希望这有帮助

        containerBuilder.Register(s =>
        {
            var factory = s.Resolve<ChannelFactory<IService>>();
            factory.Opening +=
                (sender, args) =>
                    factory.Endpoint.Behaviors.Add(new SamsTrustBehaviour());
            return factory.CreateChannel();
        });