[英]Modifying WCF endpoint behaviour during Autofac service registration
當從客戶端代理向每個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();
}
我可以將依賴項傳遞到我的客戶端代理代碼中,並調用一個方法,該方法在SamsTrustBehaviour
每個請求時將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通道終結點添加行為,這種行為會一直持續到從客戶端代理實際發出請求為止?
我最近遇到了同一問題。 以下是我使用的基於此 AutoFac文檔的解決方案。
containerBuilder.Register(s =>
{
var factory = s.Resolve<ChannelFactory<IService>>();
factory.Opening +=
(sender, args) =>
factory.Endpoint.Behaviors.Add(new SamsTrustBehaviour());
return factory.CreateChannel();
});
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.