Domanda

Stavo cercando alcune informazioni tecniche su come funziona AnsimiterCeptor dal kit di starter di riposo WCF, ma non ho trovato quello che volevo. Diamo un'occhiata allo snippet del codice preso dalla fabbrica di host di servizio personalizzato:

    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;
    }

Quel codice increato in modo che il metodo viene eseguito solo una volta.

Tuttavia, viene eseguita su ogni AutenticationInterceptor di richiesta HTTP. Come puoi vedere AuthenticationInterceptor, ha dipendenze dalla classe SecurityContext e dal repository IUSERFINDER.

Cosa succede quando diverse richieste HTTP arrivano contemporaneamente?

  1. WCF esegue AuthenticationInterceptor contemporaneamente, il che significa che SecurityContext e IUSERFINDER L'istanza dovrebbe essere sicura? Iuserfinder dipende dalle risorse della base di dati.
  2. Ogni richiesta viene eseguita una dopo l'altra, quindi AutenticationInterceptor non può essere eseguita contemporaneamente da due chiamate diverse?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top