我正在寻找一些有关 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;
}
CreateServiceHost 方法中的代码只执行一次。
但是,在每个 HTTP 请求上都会执行 AuthenticationInterceptor。如您所见,AuthenticationInterceptor 依赖于 SecurityContext 类和 IUserFinder 存储库。
当多个 HTTP 请求同时到来时会发生什么?
- WCF 是否同时执行 AuthenticationInterceptor 这意味着 SecurityContext 和 IUserFinder 实例应该是线程安全的?IUserFinder 依赖于数据库资源。
- 每个请求一个接一个地执行,所以 AuthenticationInterceptor 不能由两个不同的调用同时执行?