【问题标题】:Deploy ASP.NET Core application to IIS将 ASP.NET Core 应用程序部署到 IIS
【发布时间】:2018-02-18 12:27:59
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: asp.net iis asp.net-core-mvc web-deployment asp.net-core-2.0


    【解决方案1】:

    它不是托管的代码,也就是说 IIS 没有像使用传统的 ASP.NET 应用程序那样加载模块来运行它,但生命周期仍然与应用程序池相关联像 IIS 托管的任何其他网站一样。总而言之,根据需要配置应用程序池。

    同样,应用程序池在启动和停止方面很重要。您的每个核心应用程序都应该在自己的应用程序池中运行,这意味着您可以独立启动/停止每个应用程序。

    是的,您仍然可以使用 Web 部署。部署实际上完全独立于部署的什么。 IIS 中站点的初始配置和发布期间发生的实际构建负责处理所有特定于核心的差异。 Web Deploy 只是移动文件。

    【讨论】:

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

    我不相信我是这个问题的专家,但我可以分享我在 IIS 后面托管 .net core web api 的经验。

    OT,与 Kestrel 相比,我的应用程序(以及我所有的 POC 应用程序)在 IIS 上托管时的 rps 提高了约 40%。

    • 我使用了一些主动/主动的变体,不,应用的生命周期与空闲时间无关
    • 由于我的设置,我永远不必担心这个问题,但是我没有看到不重新启动服务的方法
    • 通过 .net 核心 cli 工具进行部署实际上非常简单且强大。由于您没有进行 docker 化,因此添加一些 powershell 远程处理/invokebuild 可以真正为您提供您所需要的所有部署自动化。

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多