2009-12-22 2 views
2

Как вызвать хранимую процедуру из метода веб-службы, не дожидаясь завершения хранимой процедуры, и просто позволить методу завершить все другие действия?Как вызвать хранимую процедуру, не дожидаясь ее завершения?

В качестве примера (не реальной ситуации, но гораздо проще понять): У меня есть таблица дома с 10 миллионов строк, и каждый год я должен вычислить, что каждый дом стоит на основе почвы, конструкции и т.д.

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

Итак, как бы я мог избежать тайм-аута и позволить моему веб-приложению продолжать делать другие вещи.

спасибо.

ответ

8

Если вы не зависят от результатов хранимой процедуры, вы можете обернуть вызов хранимой процедуры внутри метода и вызвать его с помощью

 Thread statisticsThread = new Thread(new ThreadStart(YourSPWrapper)); 
     statisticsThread.Priority = ThreadPriority.Lowest; 
     statisticsThread.Start(); 
2

Вы говорите о вызове SP, который ничего не возвращает? Как начать работу на сервере?

Вы можете попробовать использовать асинхронный делегат сделать это, ThreadPool, вероятно, самым простым:

ThreadPool.QueueUserWorkItem(myDelegateFunction); 

protected void myDelegateFunction(object state) { 
    //make your db call here and let the delegate fall out of scope 
    //if you need to set a variable saying it succeeded, set a global here 
} 

Вы можете пнуть делегат всякий раз, когда вы хотите, чтобы это было сделано, и он будет выполнен в асинхронный делегат при наличии ресурсов потока.

1

Возможно, следует использовать SQL Server Agent для планирования запроса как задания? Это особенно полезно, если работа должна выполняться по регулярному графику или только очень редко.

Если это абсолютно необходимо, вы также можете использовать SQL-скрипт для планирования задания по требованию с вашего веб-приложения. Просто убедитесь, что служба агента запущена, иначе ваша работа не начнется.

1

С IBM Informix Dynamic Server 11 вы можете рассмотреть возможность запуска этой процедуры с помощью планировщика задач DB-Cron. Программа инициирует операцию как запрос на синхронную базу данных, но задача не будет заполняться до завершения запроса.

+0

это еще одна не связанная проблема, с которой я столкнулся, я использую серверную студию, а задания обрабатываются дозорным, я хотел бы обрабатывать задания с помощью Informix, а не с сторонним приложением, являются запланированными задачами частью базы данных informix или являются частью ОС (им используется hp-ux)? спасибо – sergiogx

+0

С IDS 11 (11.10, 11.50) вы можете назначать задания только с помощью Informix. –

Смежные вопросы