将ASP.NET Core应用部署到IIS

3

在互联网上有很多关于将.NET Core应用程序部署到IIS服务器的文章,但是我仍然找不到以下问题的明确答案:

  • 在IIS背后运行的dotnet.exe进程的生命周期是多久?我猜与“经典”IIS管理池相比,dotnet进程不会在一段空闲时间后停止。
  • 现在我无法重新上传正在运行的应用程序,因为某些文件正在被dotnet.exe进程使用。如何解决这个问题?当我在同一台服务器上运行几个.NET Core应用程序时,我不能简单地终止此进程...是的,我知道在容器中运行每个网站可以解决此问题,但是我没有Docker在我的Windows Server机器上,并且我已阅读了几篇文章,人们说在Windows上运行Docker是某种moveton。
  • dotnet publish命令是否支持MS Deploy发布?VSTS上有一些插件可用于此类发布,但我希望能够从我的Visual Studio执行相同的操作。也有很多关于发布的教程,但所有这些教程都显示如何将网站发布到本地文件夹,而不是远程服务器。

谢谢。

2个回答

1
这不是托管的代码,也就是说,IIS没有加载模块来运行它,就像传统的ASP.NET应用程序一样,但其生命周期仍与由IIS托管的任何其他网站一样,与应用程序池相关。简而言之,按您想要的方式配置应用程序池即可。
同样,应用程序池在启动和停止方面很重要。 您的每个Core应用程序都应在自己的应用程序池中运行,这意味着您可以独立地启动/停止每个应用程序。
是的,您仍然可以使用Web Deploy。 部署实际上与被部署的内容完全分离。 在IIS中的站点的初始配置以及发布期间发生的实际构建会处理所有特定于Core的差异。 Web Deploy只是在移动文件。

1
感谢您的解释。应用程序池如何控制外部进程(dotnet.exe)的生命周期?这是我主要的误解——很明显,我需要在部署过程中杀死一个dotnet进程以覆盖应用程序文件,这是否意味着我可以通过某种方式停止IIS应用程序池(可能使用powershell),它将停止与池相关联的相应dotnet exe进程? - Laserson

0

我并不认为自己是这个问题的专家,但我可以分享一下我在IIS后面托管.net core web api的经验。

顺便说一句,与Kestrel相比,我的应用程序(以及所有我的POC应用程序)在IIS上托管时,其请求每秒(rps)增加了约40%。

  • 我使用某种主动/主动的变体,而且,应用程序的生命周期与空闲期无关
  • 由于我的设置,我从来不用担心这个问题,但是我看不到避免重启服务的方法
  • 通过.net core cli工具进行部署实际上非常容易和强大。由于您没有使用docker化,添加一些powershell远程/invokebuild,可以为您提供所需的所有部署自动化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接