gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:10:09 24 4
gpt4 key购买 nike

当从客户端代理向我们的每个 WCF 服务方法发出请求时,我们需要发送身份验证 cookie。创建 cookie 的代码工作正常,但我正在尝试修改 Autofac 服务注册代码以添加一个新的端点行为,该行为将 cookie 添加到请求 header 。我使用 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();
}

我可以将一个依赖项传递到我的客户端代理代码中,并调用一个方法来添加 SamsTrustBehaviour在发出每个请求时发送到端点,并且工作正常。不过,理想情况下,我更愿意在注册时这样做。下面是有效的代码,它最初是在每次请求服务时调用的:

public void AttachSamsToken<T>(T serviceInterface) where T : class
{
var clientBase = serviceInterface as ClientBase<T>;
if (clientBase != null && !clientBase.Endpoint.Behaviors.Contains(typeof(SamsTrustBehaviour)))
{
clientBase.Endpoint.Behaviors.Add(new SamsTrustBehaviour());
}
}

所以看起来添加到ClientBase<T>.Endpoint在添加到 ChannelFactory<T>.Endpoint 时工作没有。

有没有办法在注册期间向 WCF channel 端点添加一个行为,该行为一直持续到客户端代理实际发出请求为止?

最佳答案

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

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

希望对您有所帮助。

关于c# - 在 Autofac 服务注册期间修改 WCF 端点行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com