C # Что такое домен приложения? - PullRequest
0 голосов
/ 08 июня 2018

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

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

, но также и процесс

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

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

Спасибо.

Ответы [ 2 ]

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: начал писать это какответ на комментарий, но слишком большой

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

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

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

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

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

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

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

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

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

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

  • Управление жизненным циклом домена приложения выполняется программно хостами времени выполнения (вы также можете переопределить его).Для процессов и потоков вы должны явно управлять их жизненным циклом.Инициализация, выполнение, завершение, межпроцессное / многопоточное взаимодействие являются сложными, и поэтому легче отложить это на управление CLR.

Источник: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/application-domains

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