您已经使用简单的 ASP.NET 核心构建了您的应用,或者使用 ASP.NET 核心 MVC 构建了更复杂的站点,现在是向世界展示它的时候了。几年前,我们主要对部署到内部服务器感兴趣,但随着云计算的兴起,现在我们部署到 Azure 的可能性也很大。
然而,在本章中,我们将讨论本地服务器和 Azure 的体验。
基于 OWIN 的 ASP.NET 核心不依赖于服务器,但理论上它可以在任何支持它的服务器上运行。
通常,在开发过程中,ASP.NET 核心应用由本地网络服务器托管运行,该服务器被称为“红隼”(T0)T1,在启动应用的 Program.cs 文件中进行配置。基本上,每个 ASP.NET 核心应用都是独立的,可以在没有外部网络服务器的情况下运行。但是,尽管针对性能进行了优化,并且速度超快,但红隼错过了像 IIS 这样成熟的网络服务器的所有管理选项。
作为独立的应用(而不仅仅是动态链接库),需要一种不同的方法在 IIS 中托管它们。现在,IIS 只是一个简单的代理,它接收来自客户端的请求,并将它们转发给红隼上的 ASP.NET 核心应用。然后它坐下来等待处理完成,最后将响应返回给请求的发起者。
为了在 IIS 中托管 ASP.NET 核心应用,您需要安装一个特定的模块来执行反向代理工作,并确保应用正在运行。这个模块叫做AspNetCoreModule
,可以从ASP.NET 核心服务器托管包安装。
如果您想在开发机器上通过 IIS 运行 ASP.NET 核心,没有什么好做的,因为该模块是作为软件开发工具包的一部分安装的。另一方面,如果你想在一个真实的服务器上尝试,就必须安装这个模块。图 6-1 显示了 IIS 管理器应用中列出的模块。
图 6-1: IIS 模块
安装模块后,下一步是创建网站。因为该模块将只是作为一个代理,而不运行任何。NET 代码,网站需要一个配置为运行时没有任何 CLR 的应用池,所以必须选择无托管代码选项,如图 6-2 所示。
图 6-2: IIS 应用池基本配置
AspNetCoreModule
的配置来自文件夹根目录下的 web.config 文件。
代码清单 6-1
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*"
modules="AspNetCoreModule"
resourceType="Unspecified"/>
</handlers>
<aspNetCore
processPath="dotnet"
arguments=".\WebApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
使用dotnet
命令行工具可以轻松发布应用。只需使用publish
命令构建并生成一个可以轻松复制到网站所在位置的独立文件夹。通常,发布的应用保存到。/bin/[configuration]/[framework]/publish 文件夹,但是也可以使用命令行选项更改目标位置。
代码清单 6-2
dotnet publish
--framework netcoreapp1.0
--output "c:\temp\PublishFolder"
--configuration Release
发布操作还会执行postpublish
脚本,因此如果项目是使用默认项目模板创建的,则会调用publish-iis
命令,该命令会自动用项目的正确值更新web.config
文件。
现在,剩下的就是将文件夹复制到配置网站的位置。ASP.NET 核心网站正在 IIS 上运行。
dotnet publish
命令缺少的一点是发布到远程服务器并进行增量更新的可能性。另一种发布方式是 Visual Studio 中的发布对话框。
通常,系统管理员会提供一个可以导入发布对话框的发布配置文件。发布时,将构建应用,然后通过 Web Deploy 将其推送到远程服务器。
您可以使用云,而不是在内部部署。当我们谈论云时,我们不能忘记提到微软 Azure,它绝对是目前最重要的云计算平台之一。它提供大量服务,支持几乎所有可能的用户需求。
无论我们的应用是否需要扩展,微软 Azure 都可能是减少服务器管理、配置、硬件问题、备份等摩擦的好解决方案。
如果你更喜欢使用另一种云托管服务,比如亚马逊网络服务(AWS)或谷歌云,你当然可以,但通常他们会提供虚拟机。在那里进行部署类似于在您管理的远程 IIS 上进行部署。
Azure 与众不同,因为它提供了名为 App Service 的服务,打破了配置的壁垒。
从 Visual Studio 部署到 Azure 非常容易,尤其是如果所有资源都已经在 Azure 上创建了。如果是这种情况,请遵循以下步骤:
单击发布按钮。
图 6-3:使用 Visual Studio 发布网络应用
连接到 Azure。
图 6-4:选择发布目标
如果需要,请登录。
图 6-5: Azure 凭证输入
选择要部署的应用服务。
图 6-6: Azure 应用服务选择
在发布过程结束时,Visual Studio 将使用浏览器打开网站,如果一切正常,您应该会看到您的应用在 Azure 上运行。
在本章中,我们讨论了在内部 IIS 上部署 ASP.NET 核心应用有多容易,以及在 Azure 上部署它有多容易。难怪现在每个人都在转向云。
现在,您已经用 Visual Studio 构建了一个应用,并将其部署到世界各地,下一章将更深入地介绍如何在没有 Visual Studio 的情况下构建应用。