Хочу настроить какой-то эквивалент cron на моем сервере IIS

В настоящее время я работаю над настройкой системы для своей компании, используя классическую настройку ASP на IIS, которая опирается на данные из стороннего API. Проблема в том, что API отвечает очень медленно, и все, что он отправляет, — это большой XML-файл или все данные. Достаточно простое решение — запрашивать один раз в день и настраивать базу данных для хранения этой информации, чтобы приложение использовало базу данных в качестве источника вместо API.

Я написал код заполнения базы данных в файле ASP, и мне просто нужно убедиться, что он запускается каждый день. Как лучше всего это сделать? Я не совсем знаком с лучшими практиками здесь, должен ли я просто открывать запланированные задачи iexplorer, указывая на URL-адрес, который запускает парсер, или есть какой-то способ сделать это через командную строку. В основном беспокоит то, что я пытаюсь перевести то, как я буду делать это в PHP на LAMP, в ASP/WISA, вместо того, чтобы рассматривать это как отдельную проблему.


person Andrew G. Johnson    schedule 20.01.2010    source источник


Ответы (4)


Я бы рекомендовал не использовать скриптовый вызов для достижения этой цели. Лучше всего это сделать с помощью консольного приложения .Net, вызываемого из планировщика заданий.

person Joel Etherton    schedule 20.01.2010
comment
да. Это хорошее предложение. Если вы знакомы с консольными приложениями .Net, это будет лучше, чем предоставленный мной сценарий. - person alumb; 20.01.2010

Эквивалентом cron на компьютере с Windows являются «Запланированные задачи». Инструкции для Windows XP находятся здесь: http://support.microsoft.com/kb/308569< /а>. Аналогичные шаги можно выполнить в большинстве версий Windows.

Если вы поместите код фильтрации данных в файл asp, вы можете сделать http-запрос к этому файлу, используя следующий сценарий VBS:

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

Вызов для этого будет выглядеть примерно так:

HttpRequester.vbs http://localhost/MyApp/loadData.asp
person alumb    schedule 20.01.2010
comment
Я хотел бы установить это на нашем сервере, и я полагаю, что это может быть первым из многих, что касается запуска ежедневных служебных приложений - любая идея, насколько волосатым это будет, если я продолжу идти по этому пути. - person Andrew G. Johnson; 20.01.2010
comment
@ Эндрю Я бы создал один пакетный файл для каждого приложения, которое вы создаете, но это не должно быть слишком плохо. У нас около 15 запланированных задач выполняются на одном из наших серверов Windows без каких-либо проблем. - person alumb; 20.01.2010
comment
@ Эндрю - этот вид сценариев в конечном итоге выйдет из-под контроля. У меня это произошло на сервере, которым я управляю. В итоге я создал приложение .Net WinForms, в котором есть окно для каждого отдельного процесса и фоновый менеджер, позволяющий вызывать программу без интерактивности из командной строки (таким образом, человек может запускать ее и взаимодействовать или ее можно вызывать из планировщик и выполняет свою работу). - person Joel Etherton; 20.01.2010

Возможно, вы захотите создать службу Windows, которая будет работать в фоновом режиме — это сложно сделать только с помощью ASP-страницы.

person Paddy    schedule 20.01.2010
comment
Это потребует от вас реализации кода планирования самостоятельно. Было бы очень легко испортить это и иметь цикл занятости, а не цикл простоя и просто потреблять процессор. - person alumb; 20.01.2010

Тривиально вызывать страницу ASP через запланированные промежутки времени. Просто используйте порт Windows wget или curl (при необходимости вы можете использовать IE) и настройте запланированную задачу для загрузки страницы с желаемым интервалом.

Для этого не потребуется никаких сценариев, просто укажите путь к исполняемому файлу в качестве процесса, который вы хотите запустить, и URL-адрес в поле параметров (плюс некоторые другие переключатели, в зависимости от того, с какой программой вы в конечном итоге работаете).

person D'Arcy Rittich    schedule 20.01.2010