IIS运行NetCore程序

前 言

首先看下.net的最新的框架图,

 目前是中间的lib层统一了,用standard library了。上层的各应用统一还需要点时间。

 我们想要在IIS部署站点,需要熟悉下IIS的运行机制,才能更好的实施。首先来看下图

 具体的IIS运行原理,大家可以看这篇

实  践

     大家都知道我们目前在运行asp.net web程序的时候,可以直接运行bin下的Debug\netcoreapp3.1\xx.exe用来启动web站点,类似于这样的

     

 

 另外我们可以通过net自带的命令 dotnet xxx.dll

 

 但是通过这两种方式启动的时候,可能发现静态文件没有加载进来。那是为什么呢?

碰到这样的问题,我们不妨通过url展开看看css,js等文件加载路径,再通过代码跟踪很容找到问题点。

 app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot"))
            });

 可以通过修改静态文件路径的方式解决。

 

 正  文

IIS运行NetCoreWeb程序需要准备的工作如下:

  1.安装IIS;

  2.安装NetCoreRuntime,也可以安装SDK,包含运行时。VS自带的不能共享使用。

  3.安装服务器主机绑定程序Hosting(dotnet-hosting-3.1.0-win.exe)。这个程序会嵌入IIS的module中,应用程序池选无托管程序或者选择任何一个都可以。

    注意我们在发布好的网站根目录发现会保留一个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=".\WebApplication1.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

 通过这个配置文件我们发现所有的来自于IIS的web请求都交由AspNetCoreModuleV2来处理,而后再转到命令式的dotnet对应的dll应用程序处理。

最后附上一张IIS处理Core程序的简略图:

 

 

 

备注:本机测试使用控制台启动,服务器还需使用IIS寄宿。

 

posted @ 2020-04-13 13:15  小羽信息  阅读(663)  评论(0编辑  收藏  举报