Tw-city.info

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

C домен приложения

Домены приложений .NET

В .NET исполняемые файлы не обслуживаются прямо внутри процесса Windows, как это происходит в случае традиционных неуправляемых приложений. Вместо этого они обслуживаются в отдельном логическом разделе внутри процесса, который называется доменом приложения (Application Domain — AppDomain) . В единственном процессе может содержаться несколько доменов приложений, каждый из которых обслуживает свой исполняемый файл .NET. Такое дополнительное подразделение традиционного процесса Windows предоставляет ряд преимуществ, главные из которых описаны ниже:

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

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

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

Класс System.AppDomain

Платформа .NET позволяет программно осуществлять мониторинг доменов приложений, создавать новые домены приложений (или выгружать их) во время выполнения, загружать в домены приложений различные сборки и решать целый ряд других задач с применением класса AppDomain из пространства имен System, которое находится в сборке mscorlib.dll. Ниже перечислены наиболее полезные методы этого класса:

Этот статический метод позволяет создавать новый домен приложения в текущем процессе

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

Этот метод позволяет запускать сборку *.ехе внутри домена приложения за счет предоставления имени ее файла

Этот метод позволяет узнать, какие сборки .NET были загружены в данный домен приложения (двоичные файлы СОМ и С игнорируются)

Этот статический метод возвращает идентификатор потока, который является активным в текущем домене приложения

Этот метод применяется для динамической загрузки сборки в текущий домен приложения

Этот статический метод позволяет выгрузить определенный домен приложения из конкретного процесса

Платформа .NET не позволяет производить выгрузку конкретной сборки из памяти. Единственным способом для осуществления выгрузки библиотек программным образом является разрушение обслуживающего домена приложения с помощью метода Unload().

Кроме того, класс AppDomain имеет свойства и поддерживает набор событий, которые могут быть полезны для проведения мониторинга за каким-то доменом приложения. Наиболее интересные свойства и события такого рода кратко описаны ниже:

Позволяет извлечь путь к каталогу, который преобразователь адресов использует для поиска сборок

CurrentDomain

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

FriendlyName

Позволяет получить дружественное имя текущего домена приложения

MonitoringlsEnabled

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

SetupInformation

Позволяет извлечь детали конфигурации определенного домена приложения, которые предоставляются в виде объекта AppDomainSetup

Домены приложений C#

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

Процессом в операционной системе называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытые файлы и т. д. Процессу предоставляется собственное виртуальное адресное пространство размером 4 GB для 32-разрядных систем и 16 GB для 64-разрядных систем. Процессам часто нужно взаимодействовать друг с другом, например, один процесс может передавать данные другому процессу, или несколько процессов могут обрабатывать данные из общего файла. Для организации взаимодействия между процессами используются различные механизмы IPC (InterProcess Communication ).

IPC (InterProcess Communication — межпроцессное взаимодействие). Механизмы, предназначенные для организации взаимодействия между процессами.

Домен приложения – логический контейнер, позволяющий выполнять внутри одного процесса несколько сборок, не предоставляя им прямого доступа к памяти внутри других сборок. Домены поддерживают многие из функций, стандартных для процессов, включая разграничение областей памяти и доступа к ресурсам. Однако домены приложений эффективнее процессов, поскольку в одном домене приложений могут работать несколько сборок, но без издержек на запуск отдельных процессов.

Ключевое различие между доменом и процессом: Доменами приложения управляет исполняющая среда .NET Framework, а процессами – операционная система.

Обычно домены приложений для сборок автоматически создает хост исполняющей среды. Примерами хостов в таком случае могут быть, например, ASP .NET, Internet Explorer, сама операционная система.

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

Сборки изолируют не только в целях защиты, но и для повышения надежности и производительности:

  • Повышение надежности – Используя домены приложений для изоляции задач,которые могут вызвать аварийное завершение процесса. Если домен приложения становится нестабильным, его можно выгрузить, не затрагивая процесс в целом. Это особенно важно, когда процесс должен длительное время работать без перезапуска.
  • Повышение производительности – Если сборка загружена в домен приложения по умолчанию, ее нельзя выгрузить из памяти, пока выполняется процесс. Но если открыть второй домен приложения, загрузить в нем сборку, эта сборка может быть выгружена вместе с доменом приложения. Эта методика позволяет сократить рабочий набор процессов, работающих длительное время и использующих громоздкие динамически подключаемые библиотеки (DLL).
Читать еще:  Что такое контроллер домена

В .NET Framework домены приложений реализуют при помощи класса System.AppDomain. Для создания домена приложения вызывается один из перегруженных методов AppDomain.CreateDomain. Получить домен, в котором выполняет сборка в текущий момент можно, обратившись к свойству AppDomain.CurrentDomain.

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

Класс AppDomain , наследуется от MarshalByRefObject , и реализует интерфейсы _AppDomain и IEvidenceFactor.

Класс ObjectHandle используется для передачи объекта (в свернутом состоянии) между множественными доменами приложения без загрузки метаданных для свернутого объекта в каждом домене приложения AppDomain , через который переносится обработчик ObjectHandle . Таким образом, класс ObjectHandle предоставляет вызывающему контроль над моментом загрузки Type удаленного объекта в домен.

Для выполнения сборки в отдельном домене, необходимо получить доступ к нужному домену (или создать его) и вызвать метод ExecuteAssembly.

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

Одним из преимуществ загрузки сборок в новые домены приложений является возможность в любой момент освободить ресурсы, выгрузив домен приложения. Чтобы выгрузить домен приложения со всеми его сборками, достаточно вызвать статический метод AppDomain.Unload.

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

Чтобы назначить сборке удостоверения, следует создать объект System.Security.Policy.Evidence, а затем передать его как параметр перегруженному методу ExecuteAssembly. Проще всего управлять разрешениями, назначенными сборке в домене приложения, передав удостоверения зоны безопасности при помощи объекта System.Security.Policy.Zone и перечислимого System.Security.SecurityZone.

Если в одном из доменов происходит критическая ошибка или прорыв в системе защиты, то это никак не скажется на остальных доменах.

Потоки и домены – различные понятия, никак не связанные между собой. Поток всегда исполняется в одном из доменов приложения. В один момент времени поток приписан к одному из доменов приложения. В такие моменты потоку доступны только те данные, которые принадлежат его домену.

Преимущество доменов:

  • Экономия памяти
    – При запуске экземпляров приложения в одном процессе, разделении ресурсов, расход памяти может снизится в разы
  • Обмен данными между доменами быстрее чем между процессами
    – Разница в времени доступа – десятки раз.
    – Тем не менее, скорость взаимодействия между доменами значительно ниже вызовов внутри домена (сотни раз), объем данных, передающихся через границу домена, надо стараться сделать как можно меньше
  • Изоляция доменов приложений более эффективна за счет верификации управляемого кода
  • .NET Remoting позволяет передавать объекты между приложениями следующими способами.
    – Как параметры методов.
    Пример: public int myRemoteMethod (MyRemoteObject myObj)
    – Как возвращаемые значения методов.
    Пример: public MyRemoteObject myRemoteMethod(String myString)
    – Как свойства или поля .NET-компонентов.
    Пример: myObj.myNestedObject
  • При передаче объектов с маршалингом по значению (Marshal By Value, MBV) из одного приложения в другое создается полная копия объекта.
  • При передаче объектов с маршалингом по ссылке (Marshal By Reference, MBR) из одного приложения в другое создается ссылка на объект. Когда удаленное приложение получает ссылку на объект (ObjRef), она преобразуется в «прокси», обеспечивающий доступ к исходному объекту.

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

Что такое домен приложения .NET?

В частности, каковы последствия запуска кода в двух разных доменах приложений?

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

РЕДАКТИРОВАТЬ: Хороший существующий охват класса AppDomain вообще Я не понимаю Области приложений

An AppDomain в основном обеспечивает изолированную область, в которой код выполняется внутри процесса.

Легкий способ думать об этом почти похож на процесс с более легким весом, сидящий внутри вашего основного процесса. Каждый AppDomain существует в процессе в полной изоляции, что позволяет безопасно запускать код (его можно разгружать без необходимости разрывать весь процесс), с отдельной безопасностью и т.д.

Что касается вашей специфики — если вы запускаете код в 2 разных AppDomains внутри процесса, код будет работать изолированно. Любая связь между AppDomains будет либо сериализована, либо обработана через MarshallByRefObject. Это ведет себя очень похоже на использование удаленных операций в этом отношении. Это обеспечивает огромную степень безопасности — вы можете запускать код, которому вы не доверяете, и если он что-то делает не так, это не повлияет на вас.

В описании MSDN есть много других подробностей Области приложений.

Читать еще:  Уровень домена active directory

Это уровень изоляции, предоставляемый средой выполнения .NET. Таким образом, домены приложений живут в процессе (1 процесс может иметь много доменов приложений) и иметь собственное виртуальное адресное пространство.

Домены приложений полезны, потому что:

  • Они менее дороги, чем полные процессы.
  • Они многопоточные
  • Вы можете остановить его, не убивая все в процессе
  • Сегрегация ресурсов /config/etc
  • Каждый домен приложения работает на собственном уровне безопасности

Если вы посмотрите на него с точки зрения внутренних деталей процессора, он устанавливает другое значение для регистров кода (CS). код и CS: IP (указатель инструкций) — это тот, который выполняется процессором.

(для краткости я решил сократить обсуждение таблицы страниц).

AppDomain отмечает эту границу. для безопасности кода.

Причиной для этого фона является уйти с вопросом такого рода:
1. Как мы можем получить доступ к ресурсу в двух доменах приложения (да, используя каналы или некоторые другие механизмы обмена не напрямую, как CS: IP не может быть настроен на какой-либо другой appdomain.Это только ОС может это сделать. Не CLR)

Может ли быть несколько потоков в домене приложений. Технически да, поскольку значение CS будет в текущем процессе. вы можете изменить IP на что-то другое с помощью инструкции перехода (вызов функции /goto )

могут взаимодействовать два потока в двух разных доменах приложения (№ ссылочная точка 1.)

можно связать два потока в одном домене приложения (да. обратитесь к пункту 2)

на несколько других комбинаций этих случаев можно было бы ответить, не зная, как работает CS: IP.

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

Запуск Dot Net Application внутри AppDomain:
После запуска какого-либо сетевого приложения с использованием операционной системы оболочка загружает CLR в процесс, и новый AppDomain был создан в том же процессе и загружает все сборки в созданном AppDomain, теперь из кода AppDomain будет выполнен.

Когда настраивается AppDomain:
Мы можем создать собственный AppDomain, теперь дело в том, в каком сценарии мы можем создать собственный AppDomain. Предположим, что время выполнения необходимо добавить или удалить сборки без прерывания работающего приложения, тогда мы можем создать собственный AppDomain.

Что такое домен приложения?

Что такое алгоритм разработки приложения?
Скажите пожалуйста что такое Алгоритм разработки приложения.. И напишите любой пример.Спасибо.

Что такое метод equals() и что такое класс Object
Ответи на два вопроса очень надо 1) Что такое метод equals(). Чем он отличается от операции ==.

Авторизация пользователя при запуске приложения. Домен
Добрый день, есть такой вопрос, нужно организовать такую штуку: Пользователь запускает программу.

Что это такое — приложения CLR?
Что это за приложения и как с ними работать. Если можно то подкиньте книгу..

На платформе .NET исполняемые файлы не размещаются прямо внутри процесса Windows, как это происходит в случае традиционных неуправляемых приложений.
Вместо этого они попадают в отдельный логический раздел внутри процесса, который
называется доменом приложения.

Такое дополнительное разделение традиционного процесса Windows предоставляет ряд преимуществ, главные из которых описаны ниже.

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

Домены приложений гораздо менее дорогостоящие в плане потребления вычислительных ресурсов и памяти по сравнению с полноценными процессами. Благодаря
этому среда CLR способна загружать и выгружать домены приложений намного
быстрее, чем формальные процессы, тем самым значительно улучшая масштабируемость серверных приложений.

  • Домены приложений обеспечивают более глубокий уровень изоляции при размещении загруженных приложений. В случае сбоя одного домена приложения внутри процесса остальные домены приложений остаются работоспособными.
  • Взаимодействовать с доменами можно с помощью типа System.AppDomain

    Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

    Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
    Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

    Что такое IIS и что такое PWS? Почему одно без другого не работает?
    вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с.

    Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
    Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

    Что такое напряжение и что такое сила тока с позиции заряженных частиц
    Объясните пожалуйста, что такое напряжение и что такое сила тока с позиции заряженных частиц.

    C# что же такое домен приложения?

    Я понимаю, что домен приложения формирует:

    граница изоляции для обеспечения безопасности, управление версиями, надежность, и выгрузка управляемого кода,

    но то же самое делает и процесс

    1. Может ли кто-нибудь помочь мне понять практические преимущества домена приложения?
    2. Я предполагал, что домен приложения предоставляет вам контейнер для загрузки одной версии assembly, но недавно я обнаружил, что в домен приложения можно загрузить несколько версий strong key assembly.

    Моя концепция предметной области приложения все еще не ясна. И я изо всех сил пытаюсь понять, почему эта концепция была реализована, когда присутствует концепция процесса.

    2 Ответа

    Я не могу сказать, говорите ли вы вообще или конкретно .NET AppDomain .

    Читать еще:  Доверительные отношения между доменами 2020

    Я собираюсь предположить, что .NET-это AppDomain и почему это может быть действительно полезно, когда вам нужна эта изоляция внутри одного процесса.

    Например :
    Допустим, вы имеете дело с библиотекой, которая имела определенные рабочие классы, и у вас нет выбора, кроме как использовать эти рабочие классы и не можете изменить код. Это ваша работа-создать службу Windows, которая управляет указанными работниками и следит за тем, чтобы все они оставались в рабочем состоянии и работали параллельно.

    Достаточно просто, не так ли? Ну, вы надеялись. Оказывается, ваша рабочая библиотека склонна к выбрасыванию исключений, использует конфигурацию static и, как правило, является просто реальной PITA.

    Вы можете попробовать запустить их в своем собственном процессе, но для их мониторинга вам нужно будет реализовать namedpipes или попытаться вдумчиво проанализировать STDIN и STDOUT процесса.

    А что еще ты можешь сделать? Ну AppDomain на самом деле решает эту проблему. Я могу создать AppDomain для каждого работника, дать им свою собственную конфигурацию, они не могут испортить друг друга, изменив свойства static , потому что они изолированы, и, кроме того, если библиотека взорвется, и я не смогу поймать исключение, это не будет беспокоить работников в их домене. И во время всего этого я все еще могу легко общаться с этими рабочими.

    К сожалению, мне уже приходилось делать это раньше

    EDIT: начал писать это как ответ на комментарий, но стал слишком большим

    Отдельные процессы могут отлично работать во многих сценариях, однако есть только моменты, когда они могут стать болью. Я не говорю, что нужно использовать AppDomain вместо другого процесса. Я думаю, что это необычно, что вам понадобится отдельный процесс или AppDomain, но как только вам это понадобится, вы обязательно узнаете.

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

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

    Если вы управляете процессами, вам необходимо отслеживать процесс ID и отслеживать его состояние. IPCs-это здорово, но требуется время, чтобы наладить надлежащую коммуникацию по мере необходимости.

    В качестве примера давайте скажем, что ваш процесс просто умирает. Что ты делаешь? В зависимости от механизма, который вы выбрали для мониторинга, возможно, коммуникационный поток умер, возможно, работа закончена, и вы все еще показываете его как «processing». Что ты делаешь?

    Теперь о том, что происходит, когда у вас есть 20 процессов и ваше приложение управления умирает. У вас нет никакой реальной информации, все, что у вас есть-это 20 «myprocess.exe», и, возможно, теперь вам придется начать разбор аргументов командной строки, с которых они были начаты, чтобы увидеть, какие работники у вас действительно есть. Очевидно, что с AppDomain все 20 тоже умерли бы, но действительно ли вы что-то выиграли от этого процесса? Вы все еще должны кодировать возможность восстановления, однако теперь вы должны также кодировать все восстановление для ваших процессов вместо того, чтобы просто увольнять работников обратно.

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

    Некоторые практические преимущества использования домена приложения:

    В одном процессе можно запустить несколько доменов приложений. Вы также можете остановить отдельный домен приложения, не останавливая весь процесс. Это само по себе резко повышает масштабируемость сервера.

    Управление жизненным циклом домена приложения выполняется программно хостами среды выполнения (вы также можете переопределить его). Для процессов & потоков необходимо явно управлять их жизненным циклом. Инициализация, выполнение, завершение, inter-process/multithread коммуникация сложна, и именно поэтому ее легче перенести на управление CLR.

    Похожие вопросы:

    Я хочу создать новый AppDomain. Я пытаюсь сделать это : создать домен приложения и загрузить assembly Но я не знаю, какой тип я должен дать своему домену . var domain =.

    Я изучаю JMS из документации: http://docs.oracle.com/javaee/6/tutorial/doc/bncdr.html и наткнулся на это утверждение: JMS API сводит к минимуму набор понятий, которые программист должен изучить в.

    Дубликат: Что такое AppDomain Что такое домен приложения .NET а в чем его нужда? смотреть также: Использование AppDomain в C#

    Этот jenkins.domain.tld появляется в ответе на вопрос о построителе запросов на вытягивание bitbucket . В результате поиска появились страницы, на которых он упоминался как subdomain . Что же это.

    Что такое домен oauth ? Есть ли бесплатные oauth услуги? Могу ли я использовать его для регистрации StackApps ? Я много гуглил для них, но не мог найти ответа.

    Пожалуйста, дайте мне знать, что такое домен приложения .NET

    Я разработчик Java, и я довольно новичок в разработке веб-приложений с использованием Java, и у меня есть следующие сомнения. Мы разрабатываем веб-приложение, развернутое на сервере Oracle WebLogic.

    Для чего используется домен приложения в Facebook приложениях? Кто-то спросил то же самое в том, что такое Домены приложений в Facebook приложениях? но на самом деле я ничего не понял. То, что я.

    Что такое домен приложения (AppDomain) и чем он отличается от процесса или потока?

    В частности, каковы последствия выполнения кода в двух различных доменах приложений? Как обычно передаются данные через границу домена приложения? Это то же самое, что передача данных через границу.

    Ссылка на основную публикацию
    ВсеИнструменты 220 Вольт
    Adblock
    detector
    ×
    ×