MVC длительный вызов хранимой процедуры EF - PullRequest
1 голос
/ 01 февраля 2012

Мне было интересно, каким был бы простой и эффективный способ вызвать длительный / запущенный вызов хранимой процедуры через пользовательский интерфейс ASP.NET MVC 3, имеющий веб-интерфейс для немедленного возврата и пользователь "разрешил" закрыть браузери проверьте позже.

Я действительно не хотел бы создавать службы Windows только для этого, я думал об использовании подхода ThreadPool.QueueUserWorkItem, переработка не будет даже большой проблемой, и приложение не будет работатьнаходиться под большой нагрузкой, это внутренний WebUI, который мы делаем для упрощения некоторых задач обслуживания.

Кто-нибудь пробовал подход ThreadPool.QueueUserWorkItem и использовал кэш приложения или аналогичный способ для сохранения статуса вызова хранимой процедуры, например«ВЫПОЛНЕНО» или «ЗАВЕРШЕНО»?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Вам следует изучить возможность размещения службы WCF с помощью привязки MSMQ http. Таким образом, вы можете вставить этот запрос веб-службы в асинхронную очередь напрямую через вызов http.

Чтобы облегчить использование службы из пользовательского интерфейса, можно сделать конечную точку WCF конечной точкой REST.

Вы сможете отправлять сообщения непосредственно в службу REST из javascript, используя стандартную технологию организации очередей, предоставляемую Microsoft, и не будете иметь дело с многопоточностью.

Вы также можете использовать AsyncController и готовое решение, предоставляемое Microsoft.

1 голос
/ 01 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...