Как правильно обработать сбой надстройки MAF на хосте службы Windows? - PullRequest
1 голос
/ 21 июля 2011

У меня есть служба Windows, которая использует MAF для загрузки пользовательских плагинов. Вот как я загружаю каждое дополнение:

public bool ActivatePlugin()
{
    try
    {
        _addin = _token.Activate<IAddIn>(AddInSecurityLevel.Host);
        return true;
    }
    catch(Exception ex)
    {
        AddToLog("Error activating plugin");
        return false;
    }
}

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

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Просмотрите эти статьи в блоге команды System.AddIn для получения информации об обработке исключений и надстройках:

http://blogs.msdn.com/b/clraddins/archive/2007/05/01/using-appdomain-isolation-to-detect-add-in-failures-jesse-kaplan.aspx

http://blogs.msdn.com/b/clraddins/archive/2007/05/03/more-on-logging-unhandledexeptions-from-managed-add-ins-jesse-kaplan.aspx

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

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

Я знаю, что этот вопрос немного устарел, но кто-то может найти эту информацию полезной.

0 голосов
/ 04 января 2012

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

Проверьте этот ответ: Хорошая архитектура / Библиотека для надежного управления плагинами / надстройками .

...