2012-01-04 7 views
0

Я пишу базовую службу 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?

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

+0

В IIS каталог определяется как приложение. Это «приложение» сопоставляется с appPool (который является процессом). Многие приложения могут быть сопоставлены с процессом appPool. В процессе CLR создаст объект appDomain по умолчанию (подумайте как управляемую границу процесса). Приложение ASP.Net запускается в этом процессе и в этом приложении - не несколько приложений для каждого ядра. Каждый запрос будет подан из пула потоков. Если вы сохраняете состояние в proc, оно будет доступно вашему приложению внутри этого приложения ... BUT. – bryanmac

+0

НО ... проблема, которую вы должны беспокоиться, - это утилита appPools (по умолчанию). Итак, ваше состояние хрупкое - это не очень RESTful ... – bryanmac

+0

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

ответ

1

Если вы хотите пережить перезагрузку AppDomain и обменяться между несколькими приложениями ASP.NET, вам придется выйти из процесса IIS и сохранить это в центральном месте, доступном из всех приложений. База данных - хороший кандидат.

+1

Что необходимо для совместного использования - это TCP-соединения. Не между различными приложениями, а внутри того, что я предполагаю, это несколько потоков или доменов приложений. Я не уверен, сколько доменов приложений используется для приложения ASP.NET, и если Application_Start вызывается для каждого запроса или нет. Это первое приложение ASP.NET, которое я написал. –