|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Приветствую Есть приложение, где реализованна возможность пользователям создавать свои задачи (реакция на собятия -бинес логики на C#) Это описание компилируется в dll и выполнетеся при наступлении определенных событий. При перекомпиляции происходит выгрузка AppDomain те все работающие задачи написанные пользователями прирываются. Задачи могут ждать каких то действий в системе те могут выполнятся в течении длительного временти -например несколько суток. Например документ ждет визы главбуха, а визу могут поставить через неделю после запуска. Как можно сделать изминение задач пользователями, чтобы старые задачи продолжали работать? те как я понимаю не выгружать AppDomain. Григорий ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 16:14 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlЗадачи могут ждать каких то действий в системе те могут выполнятся в течении длительного временти -например несколько суток. состояние таких задач не в памяти должно жить, а в базе данных если приложение аварийно завершится или в бесперебойнике батарейки закончатся - главбух никогда визу не поставит? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 16:38 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Изопропил, естественно библиотека ранится в БД. При изминении перекомпилируется dll, загружается в бд, выгружается домен загружается обновленная dll и клиентсикие задачи валятся. Чтото по существу решения задачи можете добавить? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 17:03 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Кто компилирует эти dll-ки? Вы по сути хотите сделать динамическое подсовывание нового кода в рантайме, не выгружая при этом старый. Это очень нетривиальная задача, и без различных ухищрений, вы это сделать не сможете. Возможные направления: - Давать уникальные имена классам в dll-ках. Например, TaskV1, TaskV2, ... - Подгружать новые таски в отдельные апп-домены. Но вообще сам факт того, что вы обновляете одни задачи, не выгружая при этом старые - это уже подход, попахивающий кривизной. Хотя хз, я не знаю контекста вашей задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 17:14 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlЗадачи могут ждать каких то действий в системе те могут выполнятся в течении длительного временти -например несколько суток. А зачем при этом держать задачу за яйца? Отпусти её на покой. Когда час икс наступит, поднимай задачу и выполняй её. gr_vlНапример документ ждет визы главбуха, а визу могут поставить через неделю после запуска. Ну ты сам подумай, зачем тратить ресурсы на обычный простой. Sequential Workflow и State-Machine Workflow отлично решаются с помощью БД, как выше уже сказали. А глупости по поводу AppDomain ты это брось :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 17:23 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
МСУ, просто есть службы колторые работают круглосуточно, для которых часа Х нужно ждать месяцами. Пожалуста не предлагайте выриантов типа "отпустить задачу". Вопрос конкретизирован и если бы можно было обойтись никтобы не стал бы усложнять себе жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 18:00 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 18:19 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlМСУ, просто есть службы колторые работают круглосуточно, для которых часа Х нужно ждать месяцами. Я понял. И привел аргументы, почему это плохо. gr_vlПожалуста не предлагайте выриантов типа "отпустить задачу". Почему? gr_vlВопрос конкретизирован и если бы можно было обойтись никтобы не стал бы усложнять себе жизнь. То есть сначала ломаем себе ноги, а потом конкретизируем, что хочется ходить как все? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 19:39 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
МСУ, Вопрос сформирован конкретно, для особо одаренных поясню поставлена именно такая задача. И нужно ее решить ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 22:40 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlМСУ, Вопрос сформирован конкретно, для особо одаренных поясню поставлена именно такая задача. И нужно ее решить Для одаренных советую прочитать свой вопрос, он там всего один: gr_vlКак можно сделать изминение задач пользователями, чтобы старые задачи продолжали работать? Вам 4 человека сказали, что ваша реализация кривая. И ваш вопрос прекрасно решается с помощью Workflow, ссылку на майкрософтовскую реализацию я привел. Собственно, для такого класса задач это и было придумано. Что касается вашей чудо-архитектуры, то в рамках нее cdtyjv дал четкий ответ. Хотя я себе не представляю, как вы без сохранения состояний в БД сумеете обеспечить бесперебойную работу в течении месяцев, ожидая своего часа Х ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 22:56 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Arm79, Внимательно прочтите вопрос, в нем нет ни слова об обсуждении технологии от меня требуется реализовать поставленую задачу а не отбырыкиватся типа применяемая технология неправильная. WWF это довольно тяжелый и громоздкий фрэймворк, переход на него длитьелен и тяжел. Есть еще варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 13:19 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlArm79, Внимательно прочтите вопрос, в нем нет ни слова об обсуждении технологии от меня требуется реализовать поставленую задачу а не отбырыкиватся типа применяемая технология неправильная. WWF это довольно тяжелый и громоздкий фрэймворк, переход на него длитьелен и тяжел. Есть еще варианты? Давайте вы сначала расскажите, как вы в вашем варианте ожидаете события, которое должно произойти через 3 месяца. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 13:59 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlМСУ, Вопрос сформирован конкретно, для особо одаренных поясню поставлена именно такая задача. И нужно ее решить Вопрос сформулирован корректно. Некорректно поставлена задача. Для тех, кто в танке, задача крива как искривленное создание неофита. Как задачу поставить на правильные рельсы - уже объяснили. Хочешь бороться с ветряными мельницами с переломанными ногами? Вперед, прибивай апп домены, выключай сервера, туши свет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 17:04 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
МСУ, Если ты не знаешь как решить поставленную задачу то можно было просто промолчать, в данном случае не писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 22:49 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Arm79, Все тривиально состояние (в том числе промежуточные стадии) таска хранятся в БД, что естественно для многопользовательской системы ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 22:51 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlПри перекомпиляции происходит выгрузка AppDomain те все работающие задачи написанные пользователями прирываются. что есть "задача, написанная пользователем" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 23:07 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlArm79, Все тривиально состояние (в том числе промежуточные стадии) таска хранятся в БД, что естественно для многопользовательской системы Итак, мы получили, что есть некий пользовательский таск, который имеет промежуточное состояние, сериализуемое в БД. Получился велосипед, ибо это и есть Workflow, и WWF был бы тут очень к месту. В таком случае я не понимаю, почему вы паникуете, если dll была выгружена, а потом снова загружена? Если каждый бизнес-процесс - это отдельная dll, то при старте приложения все dll будут загружены обратно, таск десериализован из Бд и, при необходимости, исполнен ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 23:49 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Arm79, Проблема не в том что будут продолжены а в том что будут прерваны Например админ или ктото там подправил таск или написал новый, он должен быть задействаван при запуске новых задач, но старые (уже запущенные) должны работать по старому алгоритму (тот что был на момент запуска) Те как коректировать таски без срыва работы уже запущенных задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:07 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlArm79, Проблема не в том что будут продолжены а в том что будут прерваны Например админ или ктото там подправил таск или написал новый, он должен быть задействаван при запуске новых задач, но старые (уже запущенные) должны работать по старому алгоритму (тот что был на момент запуска) Те как коректировать таски без срыва работы уже запущенных задач.Версионность. Почему вы не хотите решить эту проблему через версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:09 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Что-то я не понмаю проблемы. В домен никто не запрещает загружать сборки. Выгружать их нельзя по одной. Зачем и как это: "При перекомпиляции происходит выгрузка AppDomain те все работающие задачи написанные пользователями прирываются"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:12 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlArm79, Проблема не в том что будут продолжены а в том что будут прерваны Например админ или ктото там подправил таск или написал новый, он должен быть задействаван при запуске новых задач, но старые (уже запущенные) должны работать по старому алгоритму (тот что был на момент запуска) Те как коректировать таски без срыва работы уже запущенных задач. Вы знаете, довольно трудно что-то вам говорить, ведь вы конкретику совершенно не даете. Вам уже правильно сказали про версионность. Версию вашего workflow также сериализуйте и все. Главное, чтобы админ не удалил старую dll, все изменения должны быть в новой. Ну или можно оставить старую, но вам в workflow придется прописать блоки if типа if первая версия, то такой то алгоритм, if вторая - такой то. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:15 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlКак можно сделать изминение задач пользователямиЭто можно сделать, только до начала выполнения задачи, то есть до загрузки сборки в домен. После этого можно только прекратить выполнение текущей задачи через базу, а требуемые изменения оформить в новую версию, в новую dll. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:22 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlМСУ, Если ты не знаешь как решить поставленную задачу то можно было просто промолчать, в данном случае не писать. а грубить некрасиво... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 13:25 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
skyANA, Счас рассматриваю вариант : В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Выполнение разных версий пользовательских задач осуществляется в разных доменах приложения. Домен, содержащий сборку с более ненужной версией пользовательского таска, можно выгрузить без остановки всего приложения. Как вам такой вариант? ктото пытался чтото подобное использовать??? Григорий ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:10 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlskyANA, Счас рассматриваю вариант : В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Выполнение разных версий пользовательских задач осуществляется в разных доменах приложения. Домен, содержащий сборку с более ненужной версией пользовательского таска, можно выгрузить без остановки всего приложения. Как вам такой вариант? ктото пытался чтото подобное использовать??? ГригорийЭто нормальный вариант в принципе. Другое дело, что вы можете захлебнуться во множестве застартованных доменов, если версии задач будут обновляться достаточно часто, а задачи будут долгие. О каком количестве задачи и частоте их изменений мы говорим? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:23 |
|
|
start [/forum/topic.php?fid=20&msg=38782024&tid=1402328]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 347ms |
total: | 491ms |
0 / 0 |