Как реализовать общее состояние в приложении ASP.NET MVC 3?
Я пишу базовый сервис RESTful и решил, что для этой задачи буду использовать ASP.NET MVC 3. Мое приложение будет отвечать за поддержание постоянного подключения к серверу для каждого пользователя (на данный момент). Я предполагал, что Application_Start
это место для регистрации статического / общего состояния (например, постоянных соединений), но после прочтения документации для Unity.MVC3 выясняется, что каждый цикл запроса / ответа будет запускать создание служб (путем вызова Application_Start).
Документация, на которую я ссылаюсь, гласит:
При каждом запросе один экземпляр UpperCaseService, один LowerCaseService и один ExampleContext создаются DependencyResolver через Unity. В конце запроса, ExampleContext автоматически удаляется
После прочтения другой документации и из того, что я уже предполагал, Application_Start будет вызываться для каждого AppDomain (опять же предполагается, что это будет около количества ядер на сервере).
Итак, каков будет эффективный способ поддержания набора постоянных подключений к серверу, которые переживают фазу запроса / ответа и, если возможно, распределяются между всеми доменами приложений, созданными сервером IIS?
Возможно, стоит упомянуть, что этот веб-сервис будет использоваться только другим веб-сайтом. По сути, это прокси-сервер аутентификации, однако в будущем он собирается сделать гораздо больше. Поэтому я не могу просто кэшировать ответ, так как будущие запросы потребуются, и повторная проверка подлинности не вариант.
1 ответ
Если вы хотите пережить перезапуск AppDomain и разделить состояние между несколькими приложениями ASP.NET, вам придется выйти из процесса IIS и сохранить его в центральном месте, доступном для всех приложений. База данных - хороший кандидат.