IIS運行NetCore程序

前 言

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

 目前是中間的lib層統一了,用standard library了。上層的各應用統一還需要點時間。

 我們想要在IIS部署站點,需要熟悉下IIS的運行機制,才能更好的實施。首先來看下圖

 具體的IIS運行原理,大家可以看這篇

實  踐

     大家都知道我們目前在運行asp.net web程序的時候,可以直接運行bin下的Debug\netcoreapp3.1\xx.exe用來啓動web站點,類似於這樣的

     

 

 另外我們可以通過net自帶的命令 donet 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寄宿。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章