Пул приложений IIS и кэширование - PullRequest
1 голос
/ 09 марта 2010

Я создал общедоступный список, который запускается и доступен из моего веб-приложения.

private static List<x> _x;
static readonly object lockObjx = new object();

public static void XCache()
{
            if (_x != null)
                return;

            lock (lockObjx)
            {
               _x = GetFromDatabase();
            }
}

Все это успешно работает в пуле приложений по умолчанию. Теперь мне нужно добавить веб-сервис, который может обновить этот кеш. Смогу ли я сделать это в пуле приложений по умолчанию? Если нет, я могу сделать это, не устанавливая что-то вроде MEMCache. Служба и Wepp работают на одном сервере.

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Чтобы это работало, вам нужно поместить службу в то же приложение ASP .NET, что и веб-приложение.Обычно это означает запуск их на одном сайте в IIS.

Каждое приложение ASP .NET получает свой собственный домен приложений.Каждый AppDomain имеет свою собственную копию всех объектов, включая статические ссылки.Другими словами, данные не распределяются между доменами приложений и, следовательно, не разделяются отдельными приложениями в IIS, даже если они работают в одном и том же процессе IIS (AppPool).

Здесь есть хорошая статья:*http://odetocode.com/Articles/305.aspx. Возможно, он немного староват, но все равно должен быть действительным.

0 голосов
/ 21 июня 2018

Кэш и сеансы относятся только к домену приложений (НЕ к пулу приложений).

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

Однако есть способ разделить кэш-память между различными приложениями одного пула приложений: Общая переменная для приложений в одном AppPool?

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