Domanda La mia applicazione ASP.NET smette di funzionare se sovrascrivo le DLL?


Supponiamo che la mia applicazione ASP.NET stia effettuando 4 chiamate di database separate. Se dopo la seconda chiamata, sovrascrivo le DLL nella cartella BIN, non interrompe l'elaborazione dell'elaborazione, quindi il 3 ° e il 4 ° tentativo di database falliscono?

Qualsiasi consiglio sarebbe molto apprezzato, Mosh


16
2017-12-09 02:52


origine


risposte:


ASP.NET esegue una cosa chiamata copia dell'ombra su varie risorse comprese DLL e file ResX. Quando un file è accessibile dal framework, è bloccato impedendo l'accesso diretto. Per impedire il blocco dei file all'interno di root / bin o root / App * _Resources (ad esempio), copia queste risorse in una directory predeterminata.

[Modificare]
Il directory predeterminata predefinito su qualcosa come

C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ File temporanei ASP.NET \ demo1 \ 9b9144a7 \ 8665ac07 

dove demo1 è il nome della tua applicazione e le directory nidificate che (presumo) sono hash rispetto al nome descrittivo di AppDomain per le risorse contenute.

Ad esempio, ho una directory chiamata dbresourceproviderweb da un esempio di provider di risorse su MSDN scritto da Michelle Bustamante. All'interno di quella directory, ci sono due cartelle: c8b872e2 e 7fc33f08. Per andare oltre, le risorse compilate per lo spagnolo ecuadoriano sono sotto ... \ dbresourceproviderweb \ c8b872e2 \ 97074f76 \ es-CE  e ... \ dbresourceproviderweb \ 7fc33f08 \ ac65ebd3 \ es-CE
[/Modificare]

Puoi cambiare questa directory in Application_Start come spiegato qui: L'evento AssemblyResolve non viene attivato durante la compilazione di un assembly dinamico per una pagina aspx

È possibile disattivare la copia shadow nel web.config:

<hostingEnvironment shadowCopyBinAssemblies="false" />

Quando uno di questi file copiati shadow viene aggiornato all'interno dell'applicazione, viene generato un nuovo AppDomain e le richieste nell'AppDomain corrente possono essere completate mentre tutte le nuove richieste vengono indirizzate al nuovo AppDomain.

Per ulteriori informazioni su Shadow Copy e AppDomains, consulta l'articolo di MSDN: http://msdn.microsoft.com/en-us/library/ms404279.aspx

Edit2: Ho appena saputo che è possibile modificare il tempo richiesto tra le operazioni di copia dei file per generare un AppDomain.

Nell'elemento system.web / httpRuntime, è possibile specificare waitChangeNotification e maxWaitChangeNotification in modo che non venga generato un nuovo AppDomain per ogni file copiato. Vedere MSDN.

Sebbene non esistano davvero esempi per questo comportamento su MSDN, è utile conservare come riferimento per la configurabilità di HttpRuntime.


45
2017-12-09 03:09



Gli assembly vengono caricati nel dominio dell'app e il dominio app controlla la directory, se si sostituiscono gli assembly verrà riciclata l'app e ricaricato gli assembly. Quindi sì, la tua terza / quarta chiamata fallirebbe.


2
2017-12-09 03:02