WCF REST StarterKit和RequestInterceptor线程安全

时间:2011-05-11 09:49:56

标签: .net wcf wcf-rest wcf-rest-starter-kit

我正在寻找有关WCF REST入门套件中的RequestInterceptor如何工作的一些技术信息,但我找不到我想要的东西。我们来看看自定义服务主机工厂的代码片段:

    protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        var host = (WebServiceHost2)base.CreateServiceHost(serviceType, baseAddresses);
        var authenticationProvider = Container.TryGetInstance<IAuthenticationProvider>();
        var authorizationRepository = Container.TryGetInstance<IUserFinder>();
        if (authenticationProvider == null)
            authenticationProvider = new DefaultAuthenticationProvider(authorizationRepository);
        var securityContext = new SecurityContext();
        host.Interceptors.Add(new AuthenticationInterceptor(authenticationProvider, securityContext));
        return host;
    }

该代码inCreateServiceHost方法只执行一次。

然而,在每个HTTP请求上都会执行AuthenticationInterceptor。正如您所看到的,AuthenticationInterceptor依赖于SecurityContext类和IUserFinder存储库。

当多个HTTP请求同时发生时会发生什么?

  1. WCF是否同时执行AuthenticationInterceptor,这意味着SecurityContext和IUserFinder实例应该是线程安全的? IUserFinder依赖于数据库资源。
  2. 每个请求都是一个接一个地执行,因此两个不同的调用不能同时执行AuthenticationInterceptor吗?

1 个答案:

答案 0 :(得分:0)

我自己找到了它。似乎对于给定的请求,在处理下一个请求之前,所有RequestInterceptors都以线程安全的方式运行。所有请求都排队,直到第一个请求完成所有请求拦截器。