Какой AppDomain используется классическим ASP при создании экземпляра класса .NET? - PullRequest
5 голосов
/ 23 августа 2011

Что происходит (в терминах CLR), когда код на классической странице ASP создает экземпляр класса .NET (помеченный как ComVisible, библиотека типов зарегистрирована)?

Какой AppDomain используется для вновь созданного экземпляра?Имеет ли это какое-либо отношение к домену приложений приложения ASP.NET, запущенного на том же сайте?

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Каждое «приложение» (asp.net или классический сайт ASP) в IIS выполняется в процессе win32, также известном как «пул приложений».Каждый пул приложений (процесс) может иметь одновременно загруженную ноль или одну версию CLR * (1.0,1.1,2.0,4.0).Каждый экземпляр CLR внутри процесса имеет по крайней мере один домен приложения, единицу исполнения и изоляции для .NET.Когда вы создаете экземпляр компонента .NET с помощью CCW (COM-вызываемой оболочки) из классического ASP, CLR загружается в процесс пула приложений, в котором размещается этот сайт, и для этого процесса создается домен приложения по умолчанию для этого процесса .Логическая позиция в иерархии пути URL не имеет значения, поскольку разные сегменты могут иметь разные пулы приложений.

Это, вероятно, много, чтобы принять, но я предлагаю прочитать об архитектуре IIS / WAS и отношениях CLR процесс / appdomain / сборка.

* Загрузчик CLR 4.0 позволяет один или нескольковерсии CLR для загрузки в тот же процесс

1 голос
/ 16 ноября 2011

Вы можете попробовать и проверить AppDomain.CurrentDomain

http://msdn.microsoft.com/en-us/library/system.appdomain.currentdomain.aspx

Затем вы можете посмотреть на FriendlyName или Id, чтобы увидеть или сравнить домены приложения.

РЕДАКТИРОВАТЬ:

Вы спросили в комментарии ниже, кто создает домен приложения и могут ли несколько приложений ASP делиться.ASP работает внутри IIS, и, если IIS6 или выше, приложение IIS (в котором размещается ASP) привязано к appPool.Если два приложения asp / IIS связаны с одним и тем же appPool, они совместно используют один и тот же процесс.Если нет, то нет.Процесс может иметь несколько доменов приложений.Когда сайт asp создает объект .net через COM, CLR запускает этот код.CLR создает первый домен приложения в процессе и называет его «DefaultDomain».Вы можете программно создавать других.

...