Domanda

Esiste un modo consigliato per far rimbalzare un'applicazione asp.net oltre a toccare web.config dall'interno dell'applicazione? è HttpRuntime.UnloadAppDomain () ; il modo preferito per farlo? e se sì, dove lo fai? Nello scarico di una pagina o in qualche altro posto nell'applicazione?

È stato utile?

Soluzione

Se si tratta di .NET 2.0 o versioni successive, puoi aggiungere in " App_offline.htm " file, invia una richiesta al server, rimuovila e quindi invia un'altra richiesta al server.

Questa sequenza di eventi forzerà ASP.NET a scaricare l'applicazione fintanto che il file app_offline.htm esiste nella cartella.

Il blog di Scott Guthrie su di esso: http://weblogs.asp.net/scottgu/archive/2005 /10/06/426755.aspx

Altri suggerimenti

Toccare web.config dall'interno di un'applicazione è una cattiva idea, IMO. Inoltre, l'idea di avere un file modificato è un po 'hackney, IMO.

La documentazione specifica che UnloadAppDomain chiuderà l'applicazione:

  

UnloadAppDomain consente l'arresto programmatico delle applicazioni non utilizzate.

Dovresti essere in grado di effettuare questa chiamata ovunque nell'applicazione. Intendiamoci, potresti ottenere un SecurityException , quindi assicurati che il runtime ti dia le autorizzazioni appropriate (potresti metterlo in una libreria ed effettuare una chiamata e quindi impostare la libreria nel GAC con prove per dargli piena fiducia).

questo codice funziona per me. chiamalo per ricaricare l'applicazione.

System.Web.HttpRuntime.UnloadAppDomain();

Ulteriori informazioni

  

Questo metodo scaricherà semplicemente la nostra applicazione. Se hai appena inserito questo metodo in un pulsante web ASP.NET, hai finito. Quindi, quando verrà ricaricata la nostra applicazione? In realtà, se si fa clic sul pulsante, verrà avviato il nostro metodo e scaricato l'applicazione. Inoltre sulla pagina Web in cui ci troviamo in quel momento verrà ricaricata anche perché abbiamo appena fatto clic su un pulsante e la pagina Web dovrebbe essere aggiornata. Dopo aver avviato il nostro metodo, il processo di aggiornamento della pagina farà ricaricare anche la nostra applicazione.

Puoi interrompere e avviare anche il pool di applicazioni associato all'app.

Puoi farlo chiamando il metodo HttpRuntime.ShutdownAppDomain (dovrai usare la riflessione per invocarlo, poiché è un metodo statico privato)

Vedi Come riavviare un processo di lavoro IIS a livello di codice (ovvero arresto dell'attuale dominio ASP.NET) per un esempio di come utilizzo questo metodo in un'API REST "Riavvia"

È possibile riavviare in sicurezza un'applicazione Web creando o rinominando una cartella in fase di esecuzione nella directory dell'applicazione. Ovviamente devi dare all'utente assegnato il compito di eseguire l'applicazione " modifica " diritti sulla directory web o su una sottodirectory sotto di essa.

il metodo è menzionato in http://www.bartlannoeye.be/ blog / riavvio-a-Net-web-application-senza-riavviare-iis

Ho usato il seguente codice per farlo nel mio caso. Modificalo per funzionare su un "scrivibile" sottodirectory

protected void RestartButton_Click(object sender, EventArgs e)
{
    //restart web app (instead of iisreset)
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart"));
    if (dir.Exists)
    {
        Directory.Move(dir.FullName, dir.FullName + "ed");
    }
    else
    {
        DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted"));
        if (dired.Exists)
        {
            Directory.Move(dired.FullName, dir.FullName);
        }
        else
        {
            Directory.CreateDirectory(dir.FullName);
        }
    }
}

Se non si desidera arrestare e avviare il pool di app, è sempre possibile riciclarlo.

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