【问题标题】:How to determine if .NET CORE DLL runs in Web server/host or Console App如何确定 .NET CORE DLL 是否在 Web 服务器/主机或控制台应用程序中运行
【发布时间】:2019-06-13 21:23:47
【问题描述】:

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

有没有合适的方法来确定?

【问题讨论】:

  • 如果我没有错过理解你为什么不使用这个过程?
  • @marven System.Diagnostics.Process ?给我一些工作,谢谢
  • 也许有用我不确定stackoverflow.com/a/45229477/914284 Web 程序集的名称相同,否则将是不同的名称
  • @marven 好的,我已经得到了入口程序集。我怎么知道这是某种 Linux Antry 程序集,而不是 Windows 上的 IIS。我正在查看我是否在 WEB 中,而不是在程序集名称中。它可能是使用此 DLL 的第三方客户端

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


【解决方案1】:

没有标准的方法来检测您的 dll 是否在网站中运行,首先,即使是 .NET Framework 也没有标准方法。

您基于HttpContext.Current 的方法非常有限,因为您必须做出使用它的假设,并且从来不应该允许通用检测支持网站的进程。

首先,您对“检测 dll 是否在网站或其他应用程序中运行”问题的定义似乎太宽泛了。如果您想确定您的 dll 是否在网站中运行,您必须提前知道哪些 dll 将出现在经过测试的“网站”中。完全可以想象,可以基于私有 Web 框架创建网站,这些框架跳过所有标准 ASP.Net Core 组件甚至 .NET Core 网络库,但可以使用您的程序集,而没有简单的方法来检测它是否正在运行网站。例如,可以基于 Intel 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 空间中还有许多其他进程),并保持打开的套接字侦听传入请求。比您需要为每个系统和应用程序持续维护大量进程白名单,这些系统和应用程序合法地将开放侦听套接字用于网站以外的目的,以消除任何误报。

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多