asp.net 核心中控制台应用程序和 Web 应用程序之间的区别
Difference between a console application and Web application in asp.net core
我正在尝试 运行 后台服务,该服务仅按指定的时间间隔写入文件。
我尝试了两种方法
1) 使用控制台应用程序模板创建项目
2) 创建以 Web 应用程序为模板的项目
当我 运行 来自 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
WebApplications 显然是错误的工具。
网络服务器始终在线且始终可访问,是黑客攻击的主要目标。为了弥补这一点,他们通常 运行 在您可以想象的最严格的用户权限下:读取他们的程序和此实例内容目录的权限。虽然我完全不知道它为什么起作用,但它可能会在生产环境中停止工作。
您想要编写的是一个服务或由 Windows 任务调度程序执行的内容。我个人建议使用 Task Sheduler,因为服务有自己的一套限制。除非 coruse 有一些您没有告诉我们的要求细节。
经过多年构建后台服务,我了解到 Windows 服务是实现这些应用程序的最佳工具。虽然有不同的技术可以使 IIS 应用程序在后台保持启动和 运行ning 并防止其被回收,但实际上,IIS 上的应用程序并不意味着永远执行。
如果您打算在云中构建您的应用程序,我会建议使用 Azure WebJobs 或 Azure Functions Timer-Triggered 函数之类的东西,但对于内部部署,即使在网络中使用 Hangfire 之类的东西也是不可持续。当您需要在没有“应用程序初始化”模块的 Windows 服务器上向后兼容时,最糟糕的情况就会发生。
我的建议是,如果您可以控制自己的环境,则将您的应用程序移动到一个简单的 Windows 服务。 Windows 服务消耗的内存更少,更易于管理,并且可以 运行 永远不会被回收。
这个 article 可能会有帮助。这是关于 如何将控制台应用程序转换为 Web 应用程序的分步教程。
我正在尝试 运行 后台服务,该服务仅按指定的时间间隔写入文件。
我尝试了两种方法
1) 使用控制台应用程序模板创建项目
2) 创建以 Web 应用程序为模板的项目
当我 运行 来自 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
WebApplications 显然是错误的工具。
网络服务器始终在线且始终可访问,是黑客攻击的主要目标。为了弥补这一点,他们通常 运行 在您可以想象的最严格的用户权限下:读取他们的程序和此实例内容目录的权限。虽然我完全不知道它为什么起作用,但它可能会在生产环境中停止工作。
您想要编写的是一个服务或由 Windows 任务调度程序执行的内容。我个人建议使用 Task Sheduler,因为服务有自己的一套限制。除非 coruse 有一些您没有告诉我们的要求细节。
经过多年构建后台服务,我了解到 Windows 服务是实现这些应用程序的最佳工具。虽然有不同的技术可以使 IIS 应用程序在后台保持启动和 运行ning 并防止其被回收,但实际上,IIS 上的应用程序并不意味着永远执行。
如果您打算在云中构建您的应用程序,我会建议使用 Azure WebJobs 或 Azure Functions Timer-Triggered 函数之类的东西,但对于内部部署,即使在网络中使用 Hangfire 之类的东西也是不可持续。当您需要在没有“应用程序初始化”模块的 Windows 服务器上向后兼容时,最糟糕的情况就会发生。
我的建议是,如果您可以控制自己的环境,则将您的应用程序移动到一个简单的 Windows 服务。 Windows 服务消耗的内存更少,更易于管理,并且可以 运行 永远不会被回收。
这个 article 可能会有帮助。这是关于 如何将控制台应用程序转换为 Web 应用程序的分步教程。