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

前言

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

1. IIS部署

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

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

640?wx_fmt=png

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

640?wx_fmt=png

1.3 映射演示域名

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

  1. # localhost name resolution is handled within DNS itself.

  2. #    127.0.0.1       localhost

  3. #    ::1             localhost

  4. 172.16.10.227   www.di.com # 这里的域名就是在 IIS 中设置的演示域名

1.4 发布程序到 IIS

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

  1. dotnet publish -o:c:\Deploy.IIS

640?wx_fmt=png

1.5 访问部署好的网站

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

640?wx_fmt=png

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

2. 需要学习的其它内容

2.1 IIS 中两种托管方式

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

  • 首先看一个标准的 Asp.Net Core web.config 配置文件

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <configuration>

  3.  <location path="." inheritInChildApplications="false">

  4.    <system.webServer>

  5.      <handlers>

  6.        <add name="aspNetCore"

  7.             path="*" verb="*"

  8.             modules="AspNetCoreModuleV2"

  9.             resourceType="Unspecified" />

  10.      </handlers>      

  11.      <aspNetCore processPath="dotnet"

  12.                  arguments=".\Deploy.IIS.dll"

  13.                  stdoutLogEnabled="false"

  14.                  stdoutLogFile=".\logs\stdout"

  15.                  hostingModel="outofprocess" />

  16.    </system.webServer>

  17.  </location>

  18. </configuration>

  19. <!--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),表示使用默认的构建

  1.    public class Program

  2.    {

  3.        public static void Main(string[] args)

  4.        {

  5.            CreateWebHostBuilder(args).Build().Run();

  6.        }


  7.        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

  8.            WebHost.CreateDefaultBuilder(args)

  9.                   .UseStartup<Startup>();

  10.    }

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

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

  • 强烈建议使用 WebHost.CreateDefaultBuilder(args) 的默认构造,别去踩那么多的坑

  1.    public class Program

  2.    {

  3.        public static void Main(string[] args)

  4.        {

  5.            CreateWebHostBuilder(args).Build().Run();

  6.        }


  7.        public static IWebHostBuilder CreateWebHostBuilder(string[] args)

  8.        {

  9.            return new WebHostBuilder()

  10.                .UseKestrel()

  11.                .UseIIS()

  12.                .UseIISIntegration()

  13.                .UseStartup<Startup>();

  14.        }

  15.    }

结束语

好了,今天就到这里,为了更灵活的针对各种部署环境进行发布预热,大家可以通过 dotnet publish -? 来学习更多发布命令的配置吧。

演示代码下载

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线段树/扫描线问卷调查反馈——Rmq Problem / mex(主席树),Boring Queries(二分+st表+主席树),Colorful Squares(扫描线)

文章目录Rmq Problem / mexBoring QueriesColorful SquaresRmq Problem / mex luogu4137 对aia_iai​建权值线段树 再加上可持久化 对于第RRR个版本的线段树&#xff0c;每个叶子xxx存的是aixa_ixai​x的所有iii中最大的小于RRR的位置iii 那么询问[L,R][L,R][L,R]就转化成…

C - Digital Path 计蒜客 - 42397 05-29

C - Digital Path 计蒜客 - 42397 题意&#xff1a; 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走&#xff0c;而且下一个位置必须比当前位置的数字大1&#xff0c;入口和出口必须数边缘元素&#xff0c;求可以有多少条路径。 题解&#xff1a; 第一反…

响应式编程知多少 | Rx.NET 了解下

1. 引言An API for asynchronous programming with observable streams. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.ReactiveX 使用可观察数据流进行异步编程的API。 ReactiveX结合了观察者…

数据结构之trie树——First! G,电子字典,Type Printer,Nikitosh and xor

文章目录[USACO12DEC]First! G[JSOI2009]电子字典[IOI2008] Type PrinterNikitosh and xor[USACO12DEC]First! G luogu3065 考虑每一个字符串成为答案的可能 这意味着从字典树根到字符串最后一位就恰好对应重新定义的字典序 在第iii层的时候&#xff0c;想要走特定点&#…

H - Prince and Princess 计蒜客 - 42402

H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主&#xff0c;有三种人&#xff0c;第一种是说真话的人(至少为1&#xff0c;因为公主是说真话的人)&#xff0c;第二种人是只会说假话的&#xff0c;第三种是胡说八道的(说的话真假都有可能)。现在给你三种人的…

模板:min-max容斥离散随机变量的几何分布(洛谷P3175:[HAOI2015]按位或)

前言 见到一道神题&#xff0c;学会两个知识点… 都是数学。 min-max容斥 给出式子&#xff1a; max⁡(S)∑T⊂S(−1)∣T∣1min⁡(T)\max(S)\sum_{T\sub S}(-1)^{|T|1}\min(T)max(S)T⊂S∑​(−1)∣T∣1min(T) min⁡(S)∑T⊂S(−1)∣T∣1max⁡(T)\min(S)\sum_{T\sub S}(-1)^…

杭电多校杂题收录

前言 和学长学弟一起打的hdu多校&#xff0c;打的很菜没啥难题收录&#xff0c;因为难的我都不会做。 正题 hdu7152-Copy 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid7152 题目大意 nnn个数字的序列aaa&#xff0c;mmm次操作&#xff0c;每次将一段[l,r][l,r][l,r…

.NET Core中的验证组件FluentValidation的实战分享

今天有人问我能不能出一篇FluentValidation的教程&#xff0c;刚好今天在实现我们的.NET Core实战项目之CMS的修改密码部分的功能中有用到FluentValidation&#xff0c;所以就以修改用户密码为实例来为大家进行一下ASP.NET Core中的验证组件FluentValidation的实战分享&#xf…

笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)

文章目录笛卡尔树介绍例题Largest Submatrix of All 1’s应用「POI2015」洗车 Myjnie[AGC028B] Removing BlocksSPOJ PERIODNI笛卡尔树 介绍 笛卡尔树是一种数据结构&#xff0c;每个点由两个值&#xff0c;键值key和权值val&#xff0c;组成 其键值满足二叉树性质 即点的左子…

K - Triangle 计蒜客 - 42405

K - Triangle 计蒜客 - 42405 题意&#xff1a; 给你一个三角形的三点&#xff0c;再给你三角形边上一个点&#xff0c;让你求另一个点(也要在三角形上)&#xff0c;使得平分三角形的面积 题解: 计算几何 三角形的三边ab&#xff0c;ac&#xff0c;bc 如果点p在ab上&#x…

P2508-[HAOI2008]圆上的整点【数学】

正题 题目链接:https://www.luogu.com.cn/problem/P2508 题目大意 一个在(0,0)(0,0)(0,0)的圆心&#xff0c;半径为rrr&#xff0c;求圆有多少个整点。 1≤r≤21091\leq r\leq 2\times 10^91≤r≤2109 解题思路 设这个点为(x,y)(x,y)(x,y)&#xff0c;那么有x2y2r2x^2y^2r^2…

如何为ASP.NET Core设置客户端IP白名单验证

本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式。你可以使用一下3种方式&#xff1a;使用中间件检查每个请求的远程IP地址使用Action过滤器为指定的Controller或action方法添加针对远程IP地址的检查使用IPageFilter为Razor Pages应用添加针对远程IP地…

CodeForces - 140C New Year Snowmen

CodeForces - 140C New Year Snowmen 题意&#xff1a; 现在来做雪人&#xff0c;每个雪人由三个不同大小的雪球构成&#xff1a;一个大的&#xff0c;一个中等的&#xff0c;一个小的。现在有 n 个雪球半径分别为 r1, r2, …, rn. 为了做雪人&#xff0c;三个雪球的大小必须…

洛谷P4389:付公主的背包(多项式、生成函数)

对于一些生成函数累乘的题目&#xff0c;也许可以通过求 ln⁡\lnln 转化为累加问题从而完成简化。 解析 不难写出对于单个物品 kkk 的生成函数&#xff1a; ∑i1xVi11−xVK\sum_{i1}x^{Vi}\frac{1}{1-x^{V_K}}i1∑​xVi1−xVK​1​ 那么答案的生成函数就是所有物品的函数的卷积…

数据结构之fhq-treap——Chef and Sets,[HNOI2012]永无乡,Play with Chain,[NOI2005]维修数列(结构体版代码)

因为非常板&#xff0c;所以主要是代码Tyvj 1728 普通平衡树Chef and Sets[HNOI2012]永无乡Play with Chain[NOI2005]维修数列题目很水&#xff0c;所以可能会出现代码部分细节出锅&#xff0c;但确实这些代码是能过得 还请多多包涵 Tyvj 1728 普通平衡树 luogu3369 #include…

让ASP.NET Core支持GraphQL之-GraphQL的实现原理

众所周知RESTful API是目前最流行的软件架构风格之一&#xff0c;它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。RESTful的优越性是毋庸置疑的&#xff0c;不过GraphQL也可以作为一种补充&am…

CodeForces 1514A Perfectly Imperfect Array

CodeForces 1514A Perfectly Imperfect Array 题意&#xff1a; 给你n个数&#xff0c;是否存在一个数不是平方数 题解&#xff1a; 先开方&#xff0c;转int&#xff0c;判断是否等于平方 代码&#xff1a; #include<bits/stdc.h> #define debug(a,b) printf(&quo…

另一个博客

在博客园搞了个博客&#xff0c;目前来说两边会同时更新的。 有些题目不放出来&#xff0c;都写在来博客园那边&#xff0c;虽然你们也不知道密码 链接:https://www.cnblogs.com/QuantAsk/

洛谷P4173:残缺的字符串(FFT、通配符匹配)

解析 通配符匹配的经典题。 设单词串为 AAA,文章串为 BBB。 把 AAA 翻转一下&#xff0c;判断问题就能转化为一个卷积的形式&#xff1a; F(p)&i0m−1match(Ai1,Bp−i)F(p)\&_{i0}^{m-1}match(A_{i1},B_{p-i})F(p)&i0m−1​match(Ai1​,Bp−i​) match(a,b)match(…

[2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)

文章目录CF1251C Minimize The Integeracwing164&#xff1a;可达性统计Facebook Hacker Cup 2016 Round 1 Boomerang Tournament[Zjoi2012]小蓝的好友(mrx)CF1251C Minimize The Integer ………………… 给你一个大整数aaa&#xff0c;它由nnn位数字&#xff0c;也可能有前导…