IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

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

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

前言

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

1. IIS部署

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

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

110_1.png

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

110_2.png

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

110_3.png

1.5 访问部署好的网站

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

110_4.png

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

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>();
        }
    }

结束语

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

演示代码下载

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

文章永久链接:https://tech.souyunku.com/?p=39194


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(80) 打赏



未经允许不得转载:搜云库技术团队 » Asp.NetCore轻松学-部署到 IIS 进行托管

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367