13

Ho un paio di progetti ASP.Net MVC e WebAPI. Molti di questi sono aggiornati (MVC 5/WebAPI 2). Ho ricontrollato le mie supposizioni sulla sicurezza poiché sto implementando un filtro globale (per MVC) e un delegante (per WebAPI) per unificare la sicurezza nel sistema.ASP.Net vs MVC vs WebAPI e UseTaskFriendlySynchronizationContext

In tale contesto, ho incontrato un paio di articoli e post (vedi sotto), che dice che bisogna sempre essere impostando UseTaskFriendlySynchronizationContext a true (il default è false). Ciò mi sembra strano, poiché anche in VS2013 utilizzando MVC 5 e WebAPI 2 nuovi modelli di progetto (oltre al modello ASP.Net WebForms) non si imposta affatto l'impostazione di questa app.

La documentazione MSDN su questa impostazione è praticamente inesistente e i post che ho trovato dicono che è necessario per la programmazione asincrona sembra essere nel contesto di WebForms.

Così qui sono le mie domande:

  1. Questo impostazione si applica a tutto ASP.Net o è specifico per la roba pagina di ciclo di vita in ASP.Net (che non ho usato molto)
  2. Se è così importante per la programmazione asincrona moderna, perché nessun tutorial o modello lo fa riferimento?
  3. Utilizzerebbe le richieste di Thread.CurrentPrincipal in una libreria di riferimento che utilizza ConfigureAwait (false) per porre problemi o il flusso del contesto di chiamata logica di ExecutionContext si prenderà cura di me lì? (La mia lettura e test finora indica che lo farà)

Ecco alcuni degli articoli che ho visto per quanto riguarda UseTaskFriendlySynchronizationContext:

Alcuni articoli che realmente mi ha aiutato a ottenere una comprensione di come funziona tutta questa roba che non ha mai menzionato UseTaskFriendlySynchronizationContext:

risposta

15

Il riferimento chiave mancante è this blog post. In particolare, è necessario o set UseTaskFriendlySynchronizationContexto set targetFramework a 4.5. La creazione di un nuovo progetto consente di impostare targetFramework su 4.5, in modo da ottenere il comportamento corretto (UseTaskFriendlySynchronizationContext è impostato in modo implicito su true).

per rispondere alle vostre domande specifiche:

  1. L'impostazione influenza ASP.NET gestione per tutti i tipi di richieste, non solo WebForms richiesta.
  2. La maggior parte delle esercitazioni async presuppongono uno scenario di applicazione GUI.
  3. Non ne sono sicuro; Penso che sarebbe meglio come una domanda separata. Il mio istinto è che tu non puoi dipendere dal Thread.CurrentPrincipal dopo aver lasciato il contesto ASP.NET.
+0

Ho inserito il n. 3 nella sua stessa domanda con un breve codice di esempio. Se hai la possibilità di guardarlo, lo apprezzerei davvero! ([Security, Thread.CurrentPrincipal e ConfigureAwait (false)] (http://stackoverflow.com/questions/20479888/security-thread-currentprincipal-and-configureawaitfalse)) –