ASP.NET 2.0 - Comment utiliser app_offline.htm

120

J'ai lu sur le app_offline.htmfichier qui peut être placé à la racine d'une application .NET 2.0, ce qui arrêtera essentiellement l'application et désactivera toute autre page de la demande.

J'ai placé le fichier à la racine et mon site se charge toujours. Je suis entré dans les documents par défaut dans IIS et je l'ai défini sur app_offline.htmet le site se charge toujours (cela pourrait cependant avoir été un problème de mise en cache)

Quoi qu'il en soit, est-ce que quelqu'un a rencontré des problèmes en utilisant cela? Est-ce que je fais quelque chose de mal?

Jack Marchetti
la source
Existe-t-il une page Microsoft qui documente cela?
Coops
Documentation officielle: msdn.microsoft.com/en-us/library/ff925031.aspx
Brian
J'ai utilisé avec succès app_offline.htm pour masquer le contenu de mon application Web et afficher la page temporaire. Cependant, j'ai du mal à consulter les données d'origine même après avoir supprimé le fichier app_offline.htm. C'est ma question: stackoverflow.com/questions/42979042/…
naz786

Réponses:

160

J'ai utilisé l'astuce extrêmement pratique app_offline.htm pour fermer / mettre à jour des sites dans le passé sans aucun problème.

Assurez-vous que vous placez réellement le fichier "app_offline.htm" dans la "racine" du site Web que vous avez configuré dans IIS.

Assurez-vous également que le fichier est nommé exactement comme il se doit: app_offline.htm

En dehors de cela, il ne devrait y avoir aucune autre modification à IIS que vous devriez apporter puisque le traitement de ce fichier (avec ce nom spécifique) est géré par le runtime ASP.NET plutôt que par IIS lui-même (pour IIS v6).

Sachez cependant que même si le fait de placer ce fichier à la racine de votre site forcera l'application à "s'arrêter" et à afficher le contenu du fichier "app_offline.htm" lui-même, toute demande existante obtiendra toujours le vrai site Web servi pour eux. Seules les nouvelles demandes recevront le contenu app_offline.htm.

Si vous rencontrez toujours des problèmes, essayez les liens suivants pour plus d'informations:

App_Offline.htm de Scott Gu

App_Offline.htm et contournement de la fonctionnalité "Erreurs conviviales IE"

Est-ce que app_offline.htm arrêtera les demandes en cours ou simplement les nouvelles demandes?

CraigTP
la source
6
@JackM - Pas de problème! En fait, je laisse souvent le fichier sur mon site Web et je l'appelle quelque chose comme "xapp_offline.htm". Il reste donc juste là à ne rien faire. Lorsque je souhaite mettre à niveau tout ou partie du site, je renomme simplement le fichier et supprime le préfixe «x» (cela se fait généralement via FTP). Cela arrête le site pour moi, je fais la mise à jour, puis renommez le fichier avec le préfixe "x"!
CraigTP
@JackMarchetti - Cela fonctionnera-t-il également pour les sites Web ASP.NET MVC qui utilisent le routage global.asax? J'ai vérifié toutes les suggestions ici mais je n'ai toujours pas de chance pour que cela fonctionne :(
Squig
Mise à jour du commentaire précédent: cela fonctionne maintenant et doit avoir été une sorte de problème de mise en cache. J'avais utilisé <CTRL> + Refresh, mais il était vraisemblablement mis en cache ailleurs.
Squig
Existe-t-il une page Microsoft qui documente cela?
Coops
1
@CodeBlend Eh bien, le lien vers le blog de ScottGu est assez officiel, mais je suppose que la page Microsoft la plus "officielle" serait celle-ci sur MSDN: msdn.microsoft.com/en-us/library/vstudio
...
47

Assurez-vous que votre fichier app_offline.htm fait au moins 512 octets de long. Un app_offline.htm de zéro octet n'aura aucun effet.

MISE À JOUR: les nouvelles versions d'ASP.NET/IIS peuvent se comporter mieux que lorsque j'ai écrit ceci pour la première fois.

MISE À JOUR 2: Si vous utilisez ASP.NET MVC, ajoutez ce qui suit à web.config:

<?xml version="1.0"?>
<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
    </system.webServer>
</configuration>
Mark Richman
la source
1
J'ai eu le nom de fichier exact avec un fichier vide et cela a fonctionné - page vierge affichée quelle que soit l'url que j'ai utilisée
Coops
Vérifiez ce lien pour la question de la limite de 512 octets: codeproject.com/Articles/21319/...
Massood Khaari
Cela est vrai en particulier pour les anciennes versions d'IE qui peuvent remplacer la page avec son propre message d'erreur
ChewToy
Scott Gu le décrit également dans son blog.
Matt
2
Je ne pouvais faire passer mon site MVC en mode hors ligne de l'application qu'en remplaçant complètement mon web.config par ci
Matthew Lock
14

Notez que cela se comporte de la même manière sur IIS 6 et 7.x et .NET 2, 3 et 4.x.

Notez également que lorsque app_offline.htm est présent, IIS renvoie ce code d'état http:

HTTP/1.1 503 Service Unavailable

Tout cela est intentionnel. Cela permet à votre équilibreur de charge (ou autre) de voir que le serveur est hors ligne.

Jonesome rétablit Monica
la source
1
Vous ne voulez sûrement pas que votre équilibreur de charge pense que le serveur est hors ligne, car vous souhaitez afficher le app_offline.htmaux utilisateurs pendant votre fenêtre de maintenance?
Luke
2
@Luke: Un meilleur exemple de la raison pour laquelle une réponse 503 est utile: il est préférable que le robot d'exploration de Google sache que votre site Web est actuellement en panne, plutôt que de décider d'indexer votre contenu "site est en panne" (et de signaler votre site comme ayant une tonne de doublons contenu). En outre, il peut être utile que votre CDN puisse détecter que votre origine est en panne et éviter ainsi la mise en cache de votre contenu.
Brian
10

Problème d'autorisation possible

Je sais que cet article est assez ancien, mais j'ai rencontré un problème similaire et mon fichier a été correctement orthographié.

J'ai initialement créé le fichier app_offline.htm dans un autre emplacement, puis je l'ai déplacé à la racine de mon application. En raison de ma configuration, j'ai eu un problème d'autorisations.

Le site Web a agi comme s'il n'y était pas. La création du fichier dans le répertoire racine au lieu de le déplacer, a résolu mon problème. (Ou vous pouvez simplement corriger l'autorisation dans les propriétés-> sécurité)

J'espère que ça aide quelqu'un.

Jeremy A. West
la source
4

Assurez-vous qu'il se app_offline.htmtrouve à la racine du répertoire virtuel ou du site Web dans IIS.

Andrew Hare
la source
C'est définitivement dans la racine. j'ai mon entrée \ wwwroot [WebsiteDirectory] \ app_offline.htm
Jack Marchetti
3

Assurez-vous que les extensions de nom de fichier sont visibles dans l'explorateur et que le nom de fichier est effectivement

app_offline.htm

ne pas

app_offline.htm.htm

nPcomp
la source
0

J'ai rencontré un problème très similaire à la question initiale qui m'a pris un peu de temps à résoudre.

Juste au cas où quelqu'un d'autre travaille sur une application MVC et trouve son chemin dans ce thread, assurez-vous que vous avez défini un mappage générique vers le .Net aspnet_isapi.dll approprié. Dès que j'ai fait cela, mon app_offline.htm a commencé à se comporter comme prévu.


Étapes de configuration d'IIS 6

Dans les propriétés de l'application IIS, sélectionnez l'onglet Répertoire virtuel.

Sous Paramètres de l'application, cliquez sur le bouton Configuration.

Sous Cartes d'application génériques, cliquez sur le bouton Insérer.

Entrez C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_isapi.dll, cliquez sur OK.

Peter Bernier
la source