如何确定.NET CORE DLL是否在Web服务器/主机或控制台应用程序中运行

时间:2019-06-13 21:23:47

标签: c# .net .net-core .net-standard-2.0

标题差不多。 DLL具有不同的逻辑,具体取决于这是网站还是其他应用程序类型。在框架中,我们经常使用HttpContext.Current。我们也可以从中检索请求。我查看了其他文档,例如RuntimeInformationSystem.Runtime.Hosting和其他文档。

有合适的方法来确定吗?

1 个答案:

答案 0 :(得分:0)

没有标准的方法可以检测到您的dll是否正在网站上运行,首先,甚至.NET Framework都没有。

基于HttpContext.Current的方法非常有限,原因是您必须使用该方法,并且永远都不会允许对支持网站的过程进行通用检测。

首先,您对问题“检测dll是否正在网站或其他应用程序中运行”的定义似乎太宽泛了。如果您想确定自己的dll是否在网站中运行,则必须事先知道在测试的“网站”中将存在哪些dll。完全可以想象,可以基于私有Web框架创建网站,该框架可以跳过所有标准ASP.Net Core组件甚至.NET Core网络库,并且可以使用您的程序集来检测其是否在运行中没有简单的方法。网站。例如,可以基于英特尔DPDK用户空间IO库创建非常快速的.NET Core网站。为了更好地理解问题,请转到techpowerup基准测试,并检查每种编程语言或针对不同虚拟机的及时编译语言存在多少个不同的低级和高级Web框架和堆栈。目前,.NET Core是一个独特的示例,其Web框架和堆栈的数量非常有限。

也许,解决问题的正确方法是:“检测dll是否正在ASP.Net Core框架中运行”,或者即使该dll正在使用ASP.Net Core程序集和.NET Core网络的进程中运行堆。除了将检测范围限制在可解决的问题大小之外,还需要您确定您将检查请求处理管道的哪些部分,以确认dll是否在一个过程中运行,该过程可以被描述为具有网站功能。您可能知道ASP.Net Core处理管道是可扩展的,并且可以由任何用户大量自定义,这会使上述方法无效(在.NET Framework中,该语句也适用)。

否则,尝试找到一种“通用”解决方案,您可能会决定采用非常通用的检测网站进程的方法,但比起大多数可能需要在操作系统级别进行非常低级别的验证。您可以检查运行dll的进程是否正在使用内核或什至是用户空间网络堆栈(再次以Intel DPDK为例,但HPC空间中还有许多其他进程),并保持开放套接字监听传入的请求。而不是您需要为每个系统和应用程序持续维护大量的进程白名单,这些系统和应用程序合法地将开放监听套接字用于网站以外的用途,以消除任何误报。