SituazionePipeline integrata WCF, WebAPI e OWIN IIS. Skip OWIN basata sulla rotta
Ho un'applicazione Silverlight che utilizza un backend WCF. Andando avanti, ci siamo spostati sui client JS con WebAPI.
Ho un paio di controller WebAPI che vorrei utilizzare dal client Silverlight e li ho quindi caricati all'interno dell'applicazione ASP.Net che ospita i servizi WCF.
Questo funziona bene da un punto di vista "tutti i servizi sono disponibili", tuttavia l'autorizzazione viene invocata più volte per le chiamate WCF; da OWIN e attraverso WCF ServiceAuthorizationManager
Sul lato WCF, mia implementazione ServiceAuthorizationManager convalida il token nel AuthHeader e quindi trasforma quella pedina (nel senso Transformation System.IdentityModel rivendicazioni). Sul lato WebAP sto usando Thinktecture.IdentityModel che fornisce a OWIN Middleware la convalida dei token e la trasformazione delle attestazioni.
Il problema è che il middleware OWIN viene richiamato per tutte le richieste (incluse le richieste WCF). Quindi nel caso di una richiesta WCF ottengo la convalida e la trasformazione eseguite due volte. Non posso semplicemente rimuovere ServiceAuthorizationManager e lasciare che sia il middleware a gestirlo, perché WCF non sa nulla di OWIN e il passaggio finale di ServiceAuthorizationManager è impostare l'entità di contesto dell'operazione (diversa da ClaimsPrincipal.Current).
Domanda
Qualcuno ha avuto un problema come questo prima con WCF e WebAPI seduti fianco a fianco? L'approccio migliore sarebbe in qualche modo abbandonare molto presto la pipeline OWIN per le chiamate alla WCF e, in caso affermativo, come farlo, attraverso un OMC? Oppure posso in qualche modo utilizzare l'approccio di IAppBuilder.Map per registrare solo i componenti di convalida e di trasformazione del token per le rotte API (in questo caso nulla starting/api)?
Se qualcuno può spiegare perché la versione 'app.Mapp' non funziona sarebbe molto apprezzata? –
Ho lo stesso problema: MapWhen con un predicato di corrispondenza esplicita funziona mentre Mappa non lo fa. –