Как выполнить обработку после вызова на веб-сервисе? - PullRequest
1 голос
/ 14 мая 2009

Есть ли способ, чтобы вызов веб-службы (WCF / ASMX / etc) выполнял некоторую обработку после того, как он возвращает свои результаты? Примечание. Я не ищу асинхронные вызовы, поскольку клиенту нужно получить результат как можно скорее, прежде чем будет выполнена дополнительная обработка.

Основное ограничение заключается в том, что, насколько я могу судить, единственный способ запустить код на моем сервере - через страницы ASP или веб-службы.

Можно ли это сделать, создав фоновый поток?

Ответы [ 2 ]

1 голос
/ 15 мая 2009

Ну, ваш веб-сервис, скорее всего, будет размещен на сервере Windows, верно? Вы можете сделать любое количество вещей:

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

Я думаю, ваши варианты действительно безграничны. Однако - они не являются непосредственно частью веб-службы как таковой - вам придется отключить их до окончания вызова веб-службы. В ASMX или WCF действительно нет ничего, что позволяло бы вам «отправить запрос и затем продолжить выполнение» - ваш сервисный метод отправит ответ, когда это будет сделано.

Марк

1 голос
/ 14 мая 2009

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

Это зависит от того, как вы размещаете свои веб-сервисы (что ортогонально от WCF, обеспечивающего уровень связи и активации). Обычный хостинг веб-сервисов не позволит вам обрабатывать вещи вне вызовов WS, в основном, чтобы не позволить вам выстрелить себе в ногу и съесть все ресурсы сервера.

  • Под хостингом ASP.NET ASMX вы можете ввести еще одну задачу в пул потоков : однако это может быть прекращено без предупреждения, если нагрузка на сервер слишком велика. Недавно нам пришлось прибегнуть к этому в производственном сервисе: к счастью, сервер не испытывает больших нагрузок. Мы несколько нервничаем по поводу надежности этого решения.
  • Я не работал со Windows Activation Services , но должен быть способ создания дополнительной работы в отдельном потоке.
  • Вы всегда можете реализовать свой собственный рабочий процесс, например, в качестве службы Windows, и при необходимости предоставьте ей работу. Это не очень сложно, но требует некоторой работы для надежного и масштабируемого выполнения. Не любимый, и такой сценарий БЫЛ предназначен для решения.

Создать другой поток очень просто, но IIS не должен позволять вам делать это свободно, особенно если он работает в любом веб-отеле с несколькими приложениями.

...