簡體   English   中英

在Autofac服務注冊期間修改WCF端點行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM