![]() |
1
2
使用Visual Studio运行时,很可能会使用IIS Express,在发出第一个请求之前,它不会运行ASP.NET核心项目(这实际上只是默认情况下IIS的工作方式)。这适用于使用ASP.NET Core 2.2新的进程内宿主模型时,我希望您必须使用该模型才能看到此问题。看看这个 GitHub issue 更多。 您可以通过从.csproj文件中删除aspnetcorehostingmodel xml元素来证明此理论,该文件正用于宿主ASP.NET核心应用程序(它将切换回outofprocess模式)。看起来在vs2017的项目属性对话框中的“debug”下有一个“hosting model”选项,如果不想直接编辑.csproj,可以改为“out of process”。 例如,如果您希望仅生产站点的宿主模型不在处理过程中,则可以使用web.config转换。如果您希望它在开发和生产过程中都不在进程中,只要更改上面调用的属性就足够了,因为它会自动转换为web.config属性。如果您希望使用进程内模型,那么在IIS应用程序中启用预加载是一个很好的选择(已描述 here ) |
![]() |
2
0
托管服务 做 主机启动时启动。通过WebHost,托管服务 will be started right after the application has started . 这意味着,如果实现正确,托管服务将在不需要请求进入的情况下运行。
当我在一个新的ASP.NET核心应用程序上尝试您的示例托管服务时,它工作得很好,所以如果它不适合您,那么显然您的
实际的
实施
|
![]() |
3
0
如果要让服务执行后台任务(类似于旧的Windows服务),我建议您使用: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2 而不是网络主机。 webhost添加了很多你可能不需要的东西,因为这看起来是一个简单的后台工作(假设你在读代码)。 |
![]() |
4
0
后台服务在应用程序启动时启动,然后由您来与之同步。
您可以使用
首先声明服务的接口(在本例中,它是空的,不是好的,而是干净的):
然后,宣布你的服务。下面的代码片段声明了一个服务,该服务在启动腰部运行5秒钟,然后每隔2分钟半执行一个任务:
如你所见,后台服务是否“活跃”取决于你。最后,您必须在
这足以启动服务。请记住,如果托管在IIS中,您的应用程序可以在稍后实际启动:每次回收程序集时,您的应用程序都会重新启动。相反,使用kestrel,提供了一个不会被回收的单实例应用程序。 对于那些使用.NET Core 2.1或更低版本的用户,后台类不可用,但您可以从GitHub获取定义(我将过去使用的内容发布为GitHub存储库可以移动):
|