【发布时间】:2020-07-14 06:21:15
【问题描述】:
我还有一个在 Windows 和 Linux 上运行的 .net 核心应用程序(我使用 .net 核心运行时 >= 2.1)。为了获得更好的见解,我想公开一个指标端点(简单的 HTTP GET 端点),以便 Prometheus 发布我的应用程序的一些内部统计信息。
搜索万维网,所以我总是最终使用 asp.net 核心。由于我只想向现有的 .net 核心应用程序添加一个非常简单的 HTTP GET 端点,因此将整个应用程序移植到 asp.net 似乎有点过头了。
我已经考虑过的替代方案是基于 HttpListener 编写我自己的处理程序。当涉及到一个简单的 HTTP 端点时,这是非常直接的,但由于我找到的有关 SSL 和 Linux 的所有信息都是,所以目前不支持,我应该使用 asp.net。 (https://github.com/dotnet/runtime/issues/33288#issuecomment-595812935)
所以我想知道我误解了什么!我是唯一一个? 是否已经有一个很好的库为 .net 核心提供简单的 http(s) 服务器?
编辑:[已解决] 正如@ADyson 在下面的 cmets 中提到的,现有应用程序不需要移植到 asp.net core!
2.1版本自动添加dotnet new web生成的项目文件
对"Microsoft.AspNetCore.App" 和"Microsoft.AspNetCore.Razor.Design" 的引用
当我从 .net 核心项目中引用我的 asp.net 核心项目并执行托管 Web 服务的代码时,我最终得到了一个 System.IO.FileNotFoundException 声明它 "Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core'"。
Microsoft.AspNetCore.App 是一个元包,也引用了Microsoft.AspNetCore.MVC!因此,执行程序集也必须引用此元包。这个观察误导了我,使用 asp.net core 会使我的整个应用程序围绕Microsoft.AspNetCore.App 构建。
删除这些引用并仅添加对 "Microsoft.AspNetCore" 的引用后,一切正常。
在 3.1 版中检查了从 dotnet new web 生成的项目文件后,这些引用没有被添加。对于使用较新版本 dotnet 的人来说,这不是问题!
【问题讨论】:
-
您不需要将整个应用程序移植到 asp.net。您是否尝试过使用 OWIN 在另一个应用程序中自托管?最终,尽管您编写的为 Web 应用程序服务的部分几乎肯定会依赖 asp.net 库——这是 .NET 提供 HTTP 功能的方式。你不需要创建一个完整的 MVC 设置或类似的东西。
-
他们添加了最新的 .net 核心
WorkerServices尚未使用它们,但它们看起来像您需要的。例如Host ASP.NET Core in a Windows Service。我建议检查一下related answer -
@ADyson 我看过 OWIN。虽然 conecerns 的概念和分离在其设计中听起来很有希望,但我找不到在 .net 核心应用程序中使用它的方法,因为它仅适用于完整的 .net 框架 (github.com/aspnet/AspNetKatana/blob/dev/src/…)
-
@pocketbroadcast 这不是真的,as far as I can tell。这是使用 .NET Core / .NET Standard 进行自托管的working example。请记住,OWIN 只是一个标准,而 ASP.NET Core 本身就实现了很多 OWIN 标准,而不需要那么多额外的库。
-
@ADyson 是的,你完全正确!这都是我的错。我将 wearg nuget 包添加到我的项目中,从而将我带到了一个 asp.net 存储库,而不是适当的 asp.net 核心存储库。应该更好地仔细检查。感谢您指出这一点。
标签: c# ssl .net-core httplistener