在.NET Web应用程序中实现不受信任的插件

在.NET Web应用程序中实现不受信任的插件,第1张

概述我想开发一个接受用户社区插件应用程序,类似于Chrome或Firefox.这将是一个Web应用程序,所以个别用户的应用程序的每个“实例”将运行不同的插件(插件将作为单例实例加载,但只对某些用户“活动”).我计划在.NET中实现应用程序,并尝试提出插件模型的架构. 这是我想要的属性: >插件完全在我的核心应用程序之外,作为单独的程序集. >插件运行在自己的“锁定”,低信任的环境中.可能是一个单独的 我想开发一个接受用户社区插件的应用程序,类似于Chrome或firefox.这将是一个Web应用程序,所以个别用户的应用程序的每个“实例”将运行不同的插件(插件将作为单例实例加载,但只对某些用户“活动”).我计划在.NET中实现应用程序,并尝试提出插件模型的架构.

这是我想要的属性:

>插件完全在我的核心应用程序之外,作为单独的程序集.
>插件运行在自己的“锁定”,低信任的环境中.可能是一个单独的AppDomain.
>插件只能通过我提供的API来执行.例如.我会把它们作为一个界面传递给他们,只能调用它,而不是调用任何其他程序集.我不能有可以在网络服务器上任意采取行动的插件,例如影响文件系统.
>加载中的致命碰撞不能影响核心应用程序的稳定性.

似乎System.AddIn是我最好的选择,但我不清楚我如何强制加载的插件只能通过我提供的API工作,而不加载任何其他程序集. System.AddIn是否提供该功能?另外,可以将System.AddIn与ASP.NET / IIS一起使用吗?

除System.Addin之外,还有什么其他选择?

解决方法 您可以尝试使用AppDomains并处理未处理的异常.为避免appdomain崩溃,您将不得不处理 AppDomain.UnhandledException

在上述链接中,请注意以下声明

从.NET Framework 4开始,除非事件处理程序是安全关键的且具有HandleProcessCorruptedStateExceptionsAttribute属性,否则异常会导致进程的状态(如堆栈溢出或访问冲突)引发此事件.

所以你可能需要明确处理一些配置.

我已经阅读了很多问题,声称当未处理的异常发生在子域中的不同线程时,冒泡起来并使父域失效.如果是这样,那么将所有的插件加载到一个单独的进程中,每个插件都有一个appdomain或将插件加载到单独的进程中可能是可取的.

我也遇到了关于SO的以下问题,我相信你会觉得很有帮助

> Looking for a practical approach to sand boxing .NET plugins

总结

以上是内存溢出为你收集整理的在.NET Web应用程序中实现不受信任的插件全部内容,希望文章能够帮你解决在.NET Web应用程序中实现不受信任的插件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1094811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存