Я пишу базовую службу RESTful и решил использовать ASP.NET MVC 3 для этой задачи. Мое приложение будет отвечать за поддержание постоянного соединения с сервером на пользователя (на данный момент). Я предположил, что Application_Start
- это место для регистрации статического/общего состояния (например, постоянных соединений), но после прочтения документации для Unity.MVC3, кажется, что каждый цикл запроса/ответа инициирует создание сервисов (вызывая Application_Start).Как реализовать общее состояние в приложении ASP.NET MVC 3?
Документация I refer to говорит:
На каждом запросе, один UpperCaseService, один LowerCaseService и один ExampleContext инстанцируются по DependencyResolver через Unity. В конце запроса, ExampleContext автоматически расположен
После прочтения другой документации, а также от того, что я уже предположил, Application_Start будет называться в AppDomain порождал (опять же предполагается, что это будет в непосредственной близости от того, сколько ядра есть на сервере).
Итак, что было бы эффективным способом поддерживать набор постоянных подключений к серверу, которые выживают на этапе запроса/ответа и, если возможно, совместно используются всеми AppDomains, которые создал сервер IIS?
Это может помочь упомянуть, что этот веб-сервис будет использоваться только другим веб-сайтом. Это, по сути, прокси-сервер аутентификации, однако в будущем он будет делать гораздо больше. Поэтому я не могу просто кэшировать ответ, поскольку потребуются будущие запросы, а повторная проверка подлинности не является вариантом.
В IIS каталог определяется как приложение. Это «приложение» сопоставляется с appPool (который является процессом). Многие приложения могут быть сопоставлены с процессом appPool. В процессе CLR создаст объект appDomain по умолчанию (подумайте как управляемую границу процесса). Приложение ASP.Net запускается в этом процессе и в этом приложении - не несколько приложений для каждого ядра. Каждый запрос будет подан из пула потоков. Если вы сохраняете состояние в proc, оно будет доступно вашему приложению внутри этого приложения ... BUT. – bryanmac
НО ... проблема, которую вы должны беспокоиться, - это утилита appPools (по умолчанию). Итак, ваше состояние хрупкое - это не очень RESTful ... – bryanmac
... хотя многие приложения могут быть сопоставлены с этим процессом appPool (хостинг, совместное управление), ваше приложение будет сопоставлено с 1. Ввод приложений в разные процессы обеспечивают изоляцию и способность работать как разные идентификаторы и т. д. – bryanmac