Создаются ли домены приложений для каждого запроса? - PullRequest
8 голосов
/ 17 января 2009

В ASP.NET 3.5 (с IIS6) создаются ли домены приложений для каждого запроса? Я знаю, что у всех приложений есть собственный AppDomain под w3wp.exe, но как именно работает весь AppDomain?

Сегодня я спорил с коллегой, который пытался убедить меня, что если приложение ASP.NET имеет статический объект (или класс Singleton), то этот объект будет общим для всех запросов. Я думаю, что это неверно. Я прав? Как мне убедить моего коллегу?

Спасибо!

Ответы [ 2 ]

9 голосов
/ 17 января 2009

Извините, что ваш коллега прав. В приложении ASP.NET каждое приложение, настроенное как таковое в IIS, запускается в своем собственном домене приложений, который является областью действия одноэлементного объекта. Таким образом, синглтон в App1 доступен для всех запросов к App1 (и может стать параллелизмом, если не будет тщательно обработан), но запросы в App2 не смогут получить доступ к синглтону в App1.

Threading and Pooling in the HTTP Pipeline
(источник: microsoft.com )

Эта диаграмма из журнала MSDN помогает показать, как каждое приложение изолировано в своем собственном домене приложений. Хотя на диаграмме показан рабочий процесс IIS5 (aspnet_wp.exe), рабочий процесс IIS6 будет аналогичным для приложений, настроенных для работы в том же пуле приложений.

1 голос
/ 17 января 2009

Синглтон будет существовать во всей области приложения. Кроме того, все запросы к вашему приложению будут направлены на один и тот же домен приложения, поэтому ваш коллега на самом деле прав.

Обновление: вопрос, вызванный любопытством, и я нашел «синглтон», который вы можете использовать на основе запроса Я на самом деле не рекомендую это все же. Если кому-то нужен синглтон для каждого запроса, ему нужно найти более подходящий шаблон.

...