如何在Windows服务主机中正确处理MAF插件崩溃?

时间:2011-07-20 23:21:11

标签: c# windows-services maf

我有一个使用MAF加载用户创建的插件的Windows服务。这是我加载每个插件的方式:

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

所有插件都会加载,没有任何问题。我遇到的问题是我无法控制插件的质量,有时它们会崩溃并导致整个服务停止。有没有办法让我正确捕获插件中出现的任何错误,这样就不会使服务崩溃。

1 个答案:

答案 0 :(得分:3)

从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提供了一种方法,但是你可以想象它在性能方面很昂贵。

请注意,在其他应用程序域中激活加载项并不能保证加载项不会使主机崩溃。如果加载项创建的线程引发了未处理的异常,主机将崩溃。

我知道这个问题有点旧,但其他人可以发现这些信息很有用。