2010-01-20 4 views
4

Je travaille actuellement sur la configuration d'un système pour mon entreprise en utilisant une configuration ASP sur IIS classique qui repose sur les données d'une API tierce. Le problème est que l'API répond extrêmement lentement et tout ce qu'elle envoie est un gros fichier XML ou toutes les données. Une solution simple est de demander une fois par jour et de configurer une base de données pour stocker cette information et que l'application utilise la base de données comme source au lieu de l'API.Je cherche à installer une sorte d'équivalent cron sur mon serveur IIS

J'ai écrit le code de remplissage de base de données dans un fichier ASP et j'ai juste besoin de m'assurer qu'il s'exécute tous les jours. Quelle est la meilleure façon de procéder? Je ne suis pas vraiment familier avec les meilleures pratiques ici, devrais-je juste avoir des tâches programmées ouvrir iexplorer pointant vers l'URL qui exécute le grattoir ou est-il une sorte de moyen de le faire via la ligne de commande. Surtout inquiet que j'essaie de traduire comment je le ferais en PHP sur LAMP à ASP/WISA au lieu de regarder cela comme son propre problème.

Répondre

1

Vous souhaitez probablement créer un service Windows qui s'exécutera en arrière-plan, ce qui est difficile avec une page ASP.

+0

Cela vous obligerait à implémenter le code de planification vous-même. Il serait super facile de gâcher ça et avoir une boucle occupée plutôt qu'une boucle inactive et juste manger CPU. – alumb

3

L'équivalent de cron sur un ordinateur Windows est "Scheduled Tasks". Le comment-faire pour Windows XP est ici: http://support.microsoft.com/kb/308569. Des étapes similaires peuvent être suivies sur la plupart des versions de Windows.

Si vous mettez le code de filtrage de données dans un fichier asp, vous pouvez faire une requête http à ce fichier en utilisant le script VBS suivant:

Const WinHttpVersion = "5.1" 
Dim objWinHttp, strURL 

' Request URL from 1st Command Line Argument. This is 
' a nice option so you can use the same file to 
' schedule any number of differnet scripts. 
strURL = WScript.Arguments(0) 

' For more WinHTTP v5.0 info, go to Registry Editor to find out 
' the version of WinHttpRequest object. 
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest." & WinHttpVersion) 

If IsObject(objWinHttp) Then 
    objWinHttp.Open "GET", strURL 
    objWinHttp.Send 
    If objWinHttp.Status <> 200 Then 
     Err.Raise 1, "HttpRequester", objWinHttp.ResponseText 
    End If 
    Set objWinHttp = Nothing 
End If 

If Err.Number <> 0 Then 
    ' Something has gone wrong... do something about it... 
End If 

L'appel à ce ressemblerait à quelque chose comme:

HttpRequester.vbs http://localhost/MyApp/loadData.asp 
+0

Je voudrais installer ceci sur notre serveur, et j'imagine que ceci pourrait facilement être le premier de beaucoup en ce qui concerne les applications "run daily utility" - aucune idée à quel point ça va devenir poilu si je continue à descendre ce chemin –

+0

@Andrew Je produirais un fichier batch pour chaque application que vous construisez, mais cela ne devrait pas être mauvais. Nous avons environ 15 tâches planifiées fonctionnant sur l'un de nos serveurs Windows sans aucun problème. – alumb

+0

@Andrew - ce type de script va devenir follement hors de contrôle par la suite. Je l'ai fait se produire sur le serveur que je gère. J'ai fini par construire une application .Net WinForms qui a une fenêtre pour chaque processus séparé et un gestionnaire d'arrière-plan pour permettre au programme d'être appelé sans interactivité depuis la ligne de commande (de cette façon un humain peut l'exécuter et interagir ou l'appeler le planificateur et faire son travail). –

2

Je recommanderais de ne pas utiliser d'appel de script pour cela. Cela serait mieux fait avec une application de console .Net appelée à partir du planificateur de tâches.

+0

oui. C'est une bonne suggestion. Si vous êtes familier avec les applications console .Net, ce serait mieux que le script que j'ai fourni. – alumb

0

Il est trivial d'appeler la page ASP à des intervalles planifiés. Utilisez simplement un port Windows de wget ou curl (vous pouvez utiliser IE si nécessaire) et configurez une tâche planifiée pour charger la page à l'intervalle souhaité.

Aucun script ne sera nécessaire pour cela, il suffit de placer le chemin de l'exécutable comme processus à exécuter et l'URL dans le champ des paramètres (plus quelques autres commutateurs, selon le programme avec lequel vous finissez).

Questions connexes