前言

经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地址、端口(一个或者多个)即可,在掌握好其托管部署原理后,剩下的就是对托管宿主的选择,通过本文,希望可以带给大家一种清晰的部署思路,选择最适合自己的服务部署方式。

1. IIS部署


对于从传统 .NetFramework 迁移到 .NetCore 的企业来说,选择 IIS 方式部署 .NetCore 方式可以最大化的利用现有服务器资源,同时还规避了现有技术人员对 Linux 不熟悉而引起的各种问题,以达到平滑过渡的目的。下面我们就来一个做一个最简单的发布演示

1.1 首先在 IIS 中建立一个网站 Deploy.IIS

1.2 修改应用程序池为:无托管代码/集成

1.3 映射演示域名

修改 C:\Windows\System32\drivers\etc\hosts 文件映射如果下

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
172.16.10.227   www.di.com # 这里的域名就是在 IIS 中设置的演示域名

1.4 发布程序到 IIS

上面的 IIS 网站已经建好了,我们接下来要做的,就是将程序发布到 IIS 的 物理路径 C:\Deploy.IIS 文件夹,既然是最简单的,我们就使用命令 dotnet publish 进行发布,打开项目所在文件夹,在地址栏输入 cmd 回车,然后出现控制台应用程序,在控制台中输入命令

dotnet publish -o:c:\Deploy.IIS

1.5 访问部署好的网站

在浏览器中输入地址:http://www.di.com/

  • 好了,现在已经部署成功了。虽然简单粗暴,但是我们干出来了,为了避免以后会使用到各种部署姿势,下面一个小节的内容你还需要了解一下

2. 需要学习的其它内容


2.1 IIS 中两种托管方式

部署到 IIS 的 .NETCore 应用程序可以选择两种不同的托管模式,分别是“进程内托管” 和 “进程外托管”,选择哪种托管模式取决于个人,但是一般推荐使用 “进程内托管” 模式,使用 “进程内托管”可依托 IIS 获得更高的吞吐量,下面来了解一下两种不同的托管模式的区别,选择不同的托管模式可通过修改配置文件 web.config 来完成配置选择

  • 首先看一个标准的 Asp.Net Core web.config 配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration><location path="." inheritInChildApplications="false"><system.webServer><handlers><add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /></handlers>      <aspNetCore processPath="dotnet" arguments=".\Deploy.IIS.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" /></system.webServer></location>
</configuration>
<!--ProjectGuid: ea8ea1cd-a655-48c6-ad48-1cca646c2db7-->
  • 在节点 system.webServer/aspNetCore.hostingModel 中,可以选择的值为:inprocess(进程内托管)/outofprocess(进程外托管),通过设置 hostingModel 的值来选择不同的托管模式

  • 进程内托管

选择进程内托管,意味着将 .NetCore 应用程序的工作进程托管到 IIS 的工作进程 w3wp.exe 中,使用的 IIS 进程内服务器,即使用的是:IISHttpServer。

  • 进程外托管

选择进程外托管时,web.config 配置节点 system.webServer/aspNetCore.hostingModel 的值必须设置为:outofprocess,选择进程外托管,实际上就是告诉 IIS ,当前应用程序不使用 IISHttpServer,改为使用 Kestrel 服务器

  • 不同托管模式下代码的变化

当你在 Program.cs 中使用默认的代码创建服务器的时候,不管使用的是 inprocess 还是 outofprocess ,代码是无需改变的,就像下面的代码,其中,要关注的代码是:WebHost.CreateDefaultBuilder(args),表示使用默认的构建

    public class Program{public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();}

但是,当你使用 outofprocess(进程外托管模型)时,如果是使用自定义构建服务器时,就必须注意,比如,下面的代码 new WebHostBuilder().UseKestrel(),这个时候,就必须显式的指定 UseKestrel ;否则,服务器将无法启动,如果使用了 UseKestrel 又想切换到 inprocess(进程内托管),就必须移除 .UseKestrel(),官网的介绍是在 .UseKestrel() 后面紧跟 .UseIISIntegration(),这样你就可以愉快的切换来切换去了(但是我测试的结果是必须移除);
或者,像下面的代码,使用

.UseKestrel()
.UseIIS()
.UseIISIntegration()

  • 强烈建议使用 WebHost.CreateDefaultBuilder(args) 的默认构造,别去踩那么多的坑
    public class Program{public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args){return new WebHostBuilder().UseKestrel().UseIIS().UseIISIntegration().UseStartup<Startup>();}}

演示代码下载

https://github.com/lianggx/EasyAspNetCoreDemo/tree/master/Deploy.IIS

Asp.NetCore-部署到IIS相关推荐

  1. 如何把Asp.NetCore部署成window服务

    在window上部署Asp.netcore时,当不想使用IIS时,使用双击启动就会出现一个黑色的窗体,总感觉会不经意间给关闭掉.这时候就想如果可以生成winserver,这样就可以避免掉,也可以使崩溃 ...

  2. .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决

    .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决 参考文章: (1).netcore部署到IIS上出现HTTP Error 502.5 - ...

  3. Asp.NetCore轻松学-部署到 IIS 进行托管

    前言 经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地 ...

  4. Asp.NetCore轻松学-部署到 Linux 进行托管

    前言 上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS,且学习了进程内托管和进程外托管的区别:接下来就要说说应用 Asp.Net Core 的特性(跨平台),将 .Ne ...

  5. Flex+fluorineFx +ASP.NET开发的IIS部署

    我使用asp.net做的,然后部署到iis上 先按照我前面的IIS配置好IIS: 首先注意的是,创建flex项目时选择 Application server type: ASP.NET,具体配置如下图 ...

  6. ASP.NET中新建Web网站并部署到IIS上(详细图文教程)

    场景 ASP.NET中新建MVC项目并连接SqlServer数据库实现增删改查: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. ASP.NETCore微服务(七)——【docker部署linux上线】(ECS+linux+docker+API上线部分)

    ASP.NETCore微服务(七)--[docker部署linux上线](ECS+linux+docker+API上线部分) 对应练习sql下载路径(0积分):[ASP.NETCore微服务(一)-- ...

  8. 运行Vue在ASP.NET Core应用程序并部署在IIS上

    前言 从.NET Core 1.0开始我们就将其应用到项目中,但是呢我对ASP.NET Core一些原理也还未开始研究,仅限于会用,不过园子中已有大量文章存在,借着有点空余时间,我们来讲讲如何利用AS ...

  9. ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试

    想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试. 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的 ...

  10. 解决 ASP.NET Core 部署到 IIS,更新项目时文件夹正在使用错误

    前言 虽然 ASP.NET Core 应用程序是跨平台的,但我们还是经常将它部署到 Windows 的 IIS 下. 当 ASP.NET Core 站点运行时,它会锁定正在使用的程序集,如果这时向站点 ...

最新文章

  1. python课程费用-Python在线培训课程费用是多少?值不值得报名?
  2. 使用read_html爬取网页表哥,Python笔记:用read_html()爬取table形式表格的网络数据...
  3. BeautifulSoup children descendants对比
  4. JS-事件内置对象event
  5. Web安全CSRF攻击与防御
  6. 抽象工厂和工厂方法示例_工厂方法设计模式示例
  7. leetcode112 路径总和
  8. JavaScript 正则表达式(RegExp对象、属性、方法、String支持)
  9. 简单介绍工厂模式和单例模式
  10. anaconda tensorflow import PIL 报错的解决方法
  11. 【爬虫】编码问题总结
  12. win10杜比全景声评测_Win10安装杜比全景声音效教程
  13. java 毫秒转分钟和秒_java - 将毫秒转换为分钟和秒? - 堆栈内存溢出
  14. 计算机怎么怎么打文件夹加密文件,电脑文件夹怎么加密 4种文件夹加密方法
  15. 不同币种间的清账 应付账款是USD记账 预付账款账款是人民币记账 如何清账
  16. 生存分析及生存曲线_2021-01-30
  17. 做短视频的经历——成长与心酸
  18. JAVA ActiveMQ 详解
  19. python之最大公约数
  20. 机器学习-贝叶斯分类

热门文章

  1. Centos6搭建SkyWalking 做分布式跟踪
  2. Linux 磁盘分区 Fdisk
  3. postgresql数据库备份与还原
  4. 【Daily Scrum】11-26
  5. Docker volume使用
  6. 总结运行SSIS包的几种方式
  7. App Hub上传应用的状态说明
  8. 【.Net MF网络开发板研究-03】获取雅虎天气(HttpClient示例)
  9. replace 替换字符串
  10. ip复原Java,力扣:复原IP地址