在自定义行为中设置WCF ServiceAuthorizationManager

时间:2018-06-06 10:28:41

标签: wcf authorization biztalk servicebehavior

我们有一个使用WCF-WebHttp适配器的BizTalk应用程序。

我们需要使用需要依赖注入的自定义ServiceAuthorizationManager并具有一些可配置的参数。

为此,我们使用自定义行为设置自定义授权管理器:

internal class CustomAuthorizationServiceBehavior : IServiceBehavior
{  
    CustomAuthorizationConfiguration configuration;

    public CustomAuthorizationServiceBehavior(CustomAuthorizationConfiguration configuration)
    {
        this.configuration = configuration;
    }

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
    {            
        var repository = ... //should be injected
        serviceHostBase.Authorization.ServiceAuthorizationManager = new CustomAuthorizationManager(repository, configuration);
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
    }
}

问题:

  1. 如何正确进行依赖注入?

  2. 可以在 AddBindingParameters 方法中设置自定义授权管理器吗?

  3. 它目前正在运行,但我不确定它是否符合该方法的使用方式。另一方面,如果我们在 ApplyDispatchBehavior 方法中设置授权管理器,那么我认为我们必须显式调用serviceHostBase.Authorization.ApplyDispatchBehavior,以确保授权管理器应用于DispatchRuntime所有的终点。因此,ApplyDispatchBehavior将被调用两次。无论哪种方式看起来像一个黑客。根据WCF原则推荐的方法是什么?

0 个答案:

没有答案