Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core .NET Core 3-IIS-应用程序初始化不';行不通_Asp.net Core_Iis_Background Process_Asp.net Core 3.0 - Fatal编程技术网

Asp.net core .NET Core 3-IIS-应用程序初始化不';行不通

Asp.net core .NET Core 3-IIS-应用程序初始化不';行不通,asp.net-core,iis,background-process,asp.net-core-3.0,Asp.net Core,Iis,Background Process,Asp.net Core 3.0,为了使用.NET核心MVC框架运行后台任务,我一直在遵循IHostedService文档 我希望该服务在IIS中自动启动,但是,它不工作 我已经做了以下工作: Windows服务器上安装的应用程序初始化功能 在网站上将“Preload”设置为true 在应用程序池上,设置“AlwaysRunning” 在AppPool上,将“空闲超时”设置为0 在AppPool上,确保它在“无托管代码”下运行 在ApplicationInitialization配置中,设置以下标志: doAppInitAft

为了使用.NET核心MVC框架运行后台任务,我一直在遵循IHostedService文档

我希望该服务在IIS中自动启动,但是,它不工作

我已经做了以下工作:

  • Windows服务器上安装的应用程序初始化功能
  • 在网站上将“Preload”设置为true
  • 在应用程序池上,设置“AlwaysRunning”
  • 在AppPool上,将“空闲超时”设置为0
  • 在AppPool上,确保它在“无托管代码”下运行
  • 在ApplicationInitialization配置中,设置以下标志:
  • doAppInitAfterRestart=True
  • skipManagedModules=False
  • 添加了一个initializationPage键=“/start”(一个仅用于启动应用程序的空白MVC调用)
奇怪的是,这些步骤适用于全新的Windows Server安装,但不适用于我想要使用的服务器

在有问题的服务器上,我可以看到w3wp进程尝试启动dotnet进程(通过Procmon),但在我从浏览器发送真正的HTTP请求之前,它实际上不会运行任何dotnet核心代码


我读过很多GitHub线程,它们说无论IIS的确切版本如何,这都应该可以工作——还有什么可能发生的呢

我为此付出了极大的努力,包括注销全局模块、手动修改DLL、更改applicationHost.config,以及取消各种内部IIS配置。没有人会让应用程序自动启动

然后我采用了核心方法:重新安装IIS(在卸载/重新安装之间重新启动)

这当然意味着丢失一些关于您现有托管应用程序的信息(例如绑定信息-如果您在重新安装后看到您的所有站点都“停止”,这是因为没有绑定连接了),重新安装后,我还必须:

  • 重新安装/修复Web Deploy 3.5

  • 重新安装/修复ASP.NET核心托管捆绑包(针对每个受影响的版本)

  • 重新安装/修复.NET核心SDK

然后一切按预期开始工作。我的大多数IIS站点和设置保持不变。我不必重新安装WAS(激活服务),就像在其他帖子中常见的那样



更新:我曾经遇到过这样的情况,AppInit在某些服务器上停止工作,甚至在使用上述步骤暂时解决它之后——我在这里为它打开了一个错误:

要在网站上将“Preload”设置为true才能工作,您还需要在网站上为将来访问此页面的任何人激活匿名身份验证。我刚刚开始工作,我最终发现无论你想点击哪个端点来“预加载”你的应用程序都必须是匿名的。一旦我这样做了,我的工作就成功了。

这让我想哭。几个月来,我一直在犯同样的错误,因为我一直在胡思乱想。现在我必须说服我的老板让我在我们所有的服务器上重新安装IIS。最终,这可能是IIS的问题,全局模块冲突-我猜prod服务器上的安装过程通常是随意的(在IIS上安装.NET核心模块,然后可能是WebSocket,然后可能是其他东西,然后是应用程序初始化)-这将使MSFT难以复制,通常,他们没能告诉我我正面临着本地机器的确切问题。不确定冲突的全局模块是什么…应用程序初始化无法与IISExpress一起工作(大多数扩展没有内置在其中)-尽管在本地计算机上完全安装IIS应该可以工作,但是在桌面上重新安装这些包可能会引起更大的麻烦,而不是它的价值感谢您提出的这个问题。我完全没有意识到应用程序初始化功能需要改进。