繁体   English   中英

asp.net 内核中的控制台应用程序和 Web 应用程序之间的区别

[英]Difference between a console application and Web application in asp.net core

我正在尝试运行一个后台服务,它只在指定的时间间隔内写入文件。
我尝试了两种方法
1) 使用控制台应用程序模板创建项目
2) 以 Web Application 为模板创建项目

当我从 Visual Studio 运行应用程序时,它们都运行良好。 但是当我将它们部署到 IIS 时,只有 web 应用程序版本有效。 需要注意的是,这两个项目的代码绝对没有区别。 我在两个项目中都使用了 WebHost 作为托管策略,并在控制台应用程序的情况下安装了所有依赖项,就像在 Web 应用程序版本中一样。

我还必须通知我在 IIS 中使用了 preloadEnabled="true" 选项,因为 IIS 需要 web 请求来启动应用程序。

我想知道两种项目类型之间有什么区别,因为代码是相同的? 我不想要 Web 应用程序模板。

编辑 1:我忘了提到该服务还需要公开一个 api 端点以进行健康检查。 windows 服务方法会监听 http 请求吗?

我使用以下文章来实现我的后台服务。 https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice

经过多年构建后台服务,我了解到 Windows 服务是实现这类应用程序的最佳工具。 有许多方法可以让 IIS 应用程序在后台启动和运行,并防止其被回收。 尽管如此,在实践中,IIS 上的应用程序并不意味着永远执行。

If you had an intention to build your app in the cloud, I would have suggested using something like Azure WebJobs or Azure Functions Timer-Triggered functions, but for on-premise, even using something like Hangfire in the web is not sustainable. 当您需要在没有“应用程序初始化”模块的 Windows 服务器上向后兼容时,最糟糕的情况就会发生。

我的建议是,如果您可以控制您的环境,请尝试将您的应用程序移动到一个简单的 Windows 服务。 Windows 服务消耗更少的 memory,更易于管理,并且可以永远运行而无需回收。

WebApplications 显然是错误的工具。

WebServer 始终在线且始终可访问,是黑客攻击的主要目标。 为了弥补这一点,它们通常在您可以想象的最严格的用户权限下运行:对其程序和此实例内容目录的读取权限。 虽然我根本不知道它为什么起作用,但它可能会停止在生产中工作。

你想写的是一个服务或由 Windows 任务调度器执行的东西。 我个人建议使用 Task Sheduler,因为服务有自己的一组限制。 除非有一些你没有告诉我们的要求细节。

这篇文章可能会有所帮助。 这是关于如何将控制台应用程序转换为 web 应用程序的分步教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM