Creating A Windows Service In Visual Studio 2008
Yasar Murat – Application Asp.net Warm Up à l'aide de Windows Service
Lorsque vous faites une demande pour une page de n'importe quelle application Asp.Net, il faut un certain temps le serveur pour répondre à vos demande. Au cours de cette période d'attente, certaines tâches côté serveur se produire.
Application du cycle de vie en général selon MSDN:
1 -) les demandes d'utilisation d'une ressource d'application à partir du Web serveur.
2 -) ASP.NET reçoit la première demande de l'application.
3 -) des objets de base ASP.NET sont créés pour chaque demande.
4 -) Un objet HttpApplication est attribué à la demande.
5 -) Le demande est traitée par le pipeline HttpApplication.
Lorsqu'une demande est faite à une demande la première fois, ASP.NET compile articles application. Cette première demande de réponse peut être lente en raison de la compilation de processus qui se fait par ASP.NET. Après ce processus de compilation, les demandes suivantes peuvent obtenir une réponse plus rapide que la réaction première fois.
Mais Si l'un des événements suivants se produise, ce processus de compilation a lieu à nouveau, en d'autres termes, ils entraînent un redémarrage de l'application.
* Lorsque vous modifiez le code source de votre application Web.
* Lorsque vous ajoutez, supprimez ou modifiez assemblées à partir du dossier Bin de l'application.
* Lorsque vous ajoutez, supprimez ou modifiez les ressources de localisation du ou des dossiers App_GlobalResources App_LocalResources.
* Lorsque vous ajoutez, supprimez ou modifiez le fichier Global.asax de l'application.
* Lorsque vous ajoutez, supprimez ou modifiez les fichiers de code source dans le répertoire App_Code.
* Lorsque vous ajoutez, supprimez ou modifiez le profil configuration.
* Lorsque vous ajoutez, supprimez ou modifiez des références de service Web dans le répertoire App_WebReferences.
* Lorsque vous ajoutez, supprimez ou modifiez le fichier Web.config de l'application.
Prendre un coup d'oeil sur les liens suivants pour obtenir plus d'informations sur ce cycle de vie:
http://msdn.microsoft.com/en-us/library/ms178473.aspx
http://msdn.microsoft.com/en-us/library/bb470252.aspx
Tous demandes en attente seront desservis par le domaine d'application existantes et anciennes assemblées avant de redémarrer domaine d'application, si une application est nécessaire de redémarrer.
Autre que ci-dessus articles, un pool d'applications peut être redémarré en fonction de ses propres paramètres.
Lorsque ce redémarrage de l'application qui se passe, nous devons attendre un certain temps pour obtenir la réponse du serveur, si nous il a frappé la première fois. D'attente peuvent être tolérable dans certains cas, mais pas tout le temps. La demande pourrait être très important ou gêne vient de nous attendre pour obtenir la réponse de l'application. En outre, pensez-vous que les visiteurs sont assez patient pour attendre?
Il ya des bonnes nouvelles pour cette situation. Si vous utilisez ASP.NET 4.0 et IIS 7.5 Vous pouvez définir une variable et il est peu fait.
"ASP.NET 4 navires avec une nouvelle fonctionnalité appelée "auto-start" qui répond mieux ce scénario, et est disponible lorsque ASP.NET 4 fonctionne sur IIS 7.5 (qui est livré avec Windows 7 et Windows Server 2008 R2). La fonction de démarrage automatique permet une approche contrôlée pour démarrer un processus de travail d'application, l'initialisation d'une application ASP.NET, puis accepter les requêtes HTTP. "
Le dessus de la ligne de la page où http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx Scott Guthrie pourparlers sur cette question spécifique.
Si vous servir de votre demande d'hébergement mutualisé de l'environnement et n'ont pas beaucoup de contrôle sur les paramètres de pool d'applications, de pool d'applications d'ailleurs vous ne pouvez pas isolés pour votre application et d'autres application causes de redémarrer le pool d'applications que vous êtes et de ce fait, vous devez attendre après chaque redémarrage du pool d'applications sur le serveur. Il existe une solution qu'ils peuvent vous offrir, mais que faire si vous ne veulent pas payer l'argent supplémentaire pour cette ..
Alors que je pensais à cette solution possible, j'ai pensé que si je pouvais créer une demande régulièrement à ma demande, je ne voudrais pas avoir une fin la réponse. Parce que je pourrais être en mesure de chauffer ma demande sans attendre la première demande de frapper mon application.
Ensuite, j'ai commencé à réfléchir à un moyen de créer automatiquement la demande. Je pensais que le service Windows peut être très utile. Ce que j'ai fait était fondamentalement, j'ai construit un service Windows qui crée une demande d'URL. Les adresses URL sont lues à partir d'un fichier XML appelé settings.xml.
Pas très efficace, mais vous pouvez obtenir une sorte de renseignements sur votre application web de temps en inspectant les journaux que le service de garde. Si vous regardez le code source, vous verrez que le code d'état retourne de chaque demande. Si le code de certains n'est pas retourné, nous en faisons l'erreur et a écrit son code dans journal.
Même si la solution semble appropriée, il ya un inconvénient. Nous avons besoin d'une machine qui se déroulera en continu avec une connexion Internet.
Maintenant, je vais essayer de vous expliquer chaque étape j'ai pris et vous devriez aussi, si vous voulez appliquer cette solution. Tous les fichiers, exécutables, les images utilisées dans cet article sont téléchargeables et vous pouvez voir les fichiers à la fin de cette écriture.
Ce fichier settings.xml doit être au même chemin où le service est exécutable séjours fichier. Vous pouvez écrire autant d'adresses URL que vous voulez créer à la demande, d'activer ou de désactiver la journalisation, spécifiez combien de fois nous devons créer la demande à l'URL.
Tous ces paramètres peuvent être fait à l'intérieur du fichier settings.xml.
J'ai écrit ce service Windows à l'aide;
————————————————– –
Microsoft Visual Studio 2008
Version 9.0.30729.1 SP
Cadre Microsoft. NET
La version 3.5 SP1
sur Windows Vista Home Premium Pack Service 2
Suivant est le fichier settings.xml que le service sont la lecture à partir.
————————————————– ——————————————
<XML version="1.0" encoding="UTF-8" ?>
<MySettings>
<! – Si nous voulons conserver les fichiers journaux, nous devons la série 1 sinon 0. ->
<EnableLogging>
<Enable> 1 </ Activer>
</> EnableLogging
<! – Donnez votre site web URL que vous souhaitez réchauffement périodiquement. ->
<WhichSites>
http://www.yasarmurat.com <WebSite> </ Site Web>
</ WhichSites>
<WhichSites>
http://www.microsoft.com <WebSite> </ Site Web>
</ WhichSites>
<WhichSites>
http://www.google.com <WebSite> </ Site Web>
</ WhichSites>
<WhichSites>
http://www.xyz.com <WebSite> </ Site Web>
</ WhichSites>
<! – Combien de fois réchauffement processus fonctionnera. (En minutes) ->
<HowOftenAreWeGoingToCheck>
<HowOftenInMinutes> 3 </ HowOftenInMinutes>
> <HowOftenAreWeGoingToCheck /
</ MySettings>
Vous pouvez ajouter autant de sites web que vous voulez en ajoutant des balises suivantes dans le fichier settings.xml.
<WhichSites>
http://www.yasarmurat.com <WebSite> </ Site Web>
</ WhichSites>
La partie principale de ce service est ci-dessous. Il est tout simplement crée une demande de Web et prend la réponse du serveur.
————————————————– ————————————————– —————————————–
/ / WarmUpAspNetApp section.
demande System.Net.HttpWebRequest = (System.Net.HttpWebRequest) System.Net.WebRequest.Create (Convert.ToString (hashWhichSitesSpecification [@ "WhichSites_" + i.ToString ()]));
request.Credentials System.Net.CredentialCache.DefaultCredentials =;
request.Method = @ "GET";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;. NET CLR 1.0.3705;)";
System.Net.HttpWebResponse réponse = (System.Net.HttpWebResponse) request.GetResponse ();
if (réponse == null | | response.StatusCode! = System.Net.HttpStatusCode.OK)
(
writeIntoEventViewer (@ "La demande qui a été fait pour [[hashWhichSitesSpecification + @" WhichSites_ "+ i.ToString ()] + @]« retour ["response.StatusCode.ToString + () @ +] », Comme le code de statut." System.Diagnostics.EventLogEntryType.Error);
)
d'autre
(
if (Convert.ToInt32 (hashEnableLoggingSpecification ["AreWeGoingToLog"]) == 1)
(
[(@"[" WriteIntoEventViewer hashWhichSitesSpecification + @ "WhichSites_" + i.ToString ()] + @] "a donné la réponse avec succès." EventLogEntryType.Information);
)
)
response.Close ();
/ / Section WarmUpAspNetApp.
Vous pouvez télécharger Visual Studio fichier solution ou uniquement les fichiers nécessaires à installer et à utiliser ce service. S'il vous voulez télécharger cliquez sur le fichier solution WarmUpAspNetApp.rar ou tout simplement pour télécharger le nécessaire, cliquez sur les fichiers AspNetWarmUpService.rar à partir du lien à la fin d'écrire ces lignes.
Avant de commencer l'installation du service, je suppose que vous avez copié le dossier nécessaire dans la racine du lecteur C comme suit.
C: AspNetWarmUpService
Suivant sont les fichiers qui sont nécessaires pour être au coeur de ce dossier.
C: AspNetWarmUpService installService.bat
C: AspNetWarmUpService uninstallService.bat
C: AspNetWarmUpService WarmUpAspNetApp.exe
C: AspNetWarmUpService WarmUpAspNetApp.pdb
C: AspNetWarmUpService WarmUpAspNetApp.vshost.exe
C: AspNetWarmUpService WarmUpAspNetApp.vshost.exe.manifest
C: AspNetWarmUpService settings.xml
Maintenant, nous pouvons installer le service Windows comme suit:
————————————————– ———————
C: WINDOWS Microsoft.NET Framework v2.0.50727 InstallUtil.exe C: AspNetWarmUpService WarmUpAspNetApp.exe
Ici, je suppose que vous avez déjà installé. NET Framework et placé le dossier nommé AspNetWarmUpService sous le lecteur C.
Dans Si vous avez besoin de supprimer ce service, le texte suivant est la façon de le faire. Désinstallation du Service:
————————————————– ————————————————– ———————————
C: WINDOWS Microsoft.NET Framework v2.0.50727 InstallUtil.exe / U C: WarmUpAspNetApp.exe AspNetWarmUpService
Comme vous pouvez le deviner, c'est la ligne de commande où l'on tourne au-dessus des lignes. Si vous utilisez Vista, vous devez ouvrir cmd.exe avec l'administrateur privilège. Si vous n'avez pas, vous ne serez pas en mesure d'installer ou de désinstaller le service Windows avec succès. Pour être en mesure d'exécuter la ligne de commande avec des privilèges d'administrateur, vous pouvez faire l'un des suivants:
Méthode A-)
1. Appuyez sur la touche du clavier ou cliquez sur Win Vista bouton Démarrer.
2. Tapez cmd dans la zone de texte Rechercher.
3. Appuyez sur Ctrl + Maj + Entrée raccourci clavier. Ctrl-Maj-Entrée est le raccourci clavier qui déclenche l'élévation générale de «Exécuter en tant qu'administrateur".
4. Appuyez sur Alt + C ou appuyez sur Continuer pour confirmer l'avertissement d'altitude invite UAC.
Méthode B-)
1. Cliquez sur le bouton Démarrer Vista.
2. Dans la zone Rechercher, tapez "cmd" (sans les guillemets).
3. Faites un clic droit sur l'invite de commandes dans le résultat de la recherche annonce.
4. Dans le menu clic droit, cliquez sur "Exécuter en tant que point d'administrateur menu".
Après l'installation du service Windows, nous avons besoin de mettre en place certaines propriétés des ce service afin de fonctionner correctement.
* Cliquez sur le bouton Démarrer Vista.
* Dans la zone Rechercher, tapez "services.msc" (sans guillemets).
* Si d'alerte invite apparaît, par exemple continuer.
* Allez en bas et de trouver un service de WarmUpAspNet.
* Faites un clic droit dessus et choisissez Propriétés.
* Assurez-vous que le type de démarrage est défini sur Automatique. (Il convient de être par défaut.)
* Passez à la section de récupération et choisissez "Redémarrer le service" pour le premier, deuxième et échecs ultérieurs.
* Cliquez sur Appliquer puis sur OK.
* Faites un clic droit sur le service et choisissez "Démarrer" pour lancer le service.
Réglage "Redémarrer le service" pour les 3 types de pannes est très important. Si vous ne le faites pas, le service ne sera pas en mesure de redémarrer lui-même, si quelque chose se passe mal pendant qu'il est runned. Aussi toutes les 10 heures, le service est redémarré en cas de fuite de mémoire.
Ces 3 doit être réglé "Redémarrer le service" autrement le service ne fonctionne pas comme il devrait.
Après avoir attendu le temps que vous avez spécifié dans le fichier settings.xml entre 3 balises, vous devriez être en mesure de voir le journal l'Observateur d'événements à l'intérieur avec la clé "Service WarmUpAspNetApp". Encore une fois, je suppose que vous avez le privilège d'écrire dans l'Observateur d'événements. J'utilise Windows Event Viewer de garder ouvrir une session sur ces demandes. Vous pouvez mettre en œuvre un autre mécanisme tout en vous avez le code source. Ecrire dans un fichier txt, ou en envoyant un e-mail lorsqu'une erreur se produit ou d'autre chose que vous appréciez avec.
Si vous n'avez aucune modification dans le fichier settings.xml, vous devez redémarrer le service manuellement afin de prendre effet ces changements. Sinon, il prendra effet après le redémarrage du service par sa logique.
J'ai expliqué à chaque étape, j'ai pris ici avec des screenshots sur le lien suivant. Vous pouvez également télécharger le fichier solution, seuls les fichiers nécessaires pour installer le service et les captures d'écran à partir de ce lien ainsi.
href = "http://www.yasarmurat.com/Blog/33/asp-net-application-warm-up-by-using-windows-service.aspx" target = "_blank" title = "Fichiers en téléchargement sont ici» > http://www.yasarmurat.com/Blog/33/asp-net-application-warm-up-by-using-windows-service.aspx
Avoir un grand jour.
About the Author
My name is Murat Yasar.
I was born in Istanbul, in 1976 and have been living here since then.
I work as a .NET developer in a company.
http://www.yasarmurat.com
