C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)6 -將項目部署到IIS,及常見錯誤解決方案

1.前言

本文是接:
《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)1 -環境準備及創建項目》
《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)2 -獲取Word的頁數》
《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)3 -獲取PPT和PDF的頁數》
《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)4 -獲取Excel的頁數》
《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)5 -添加Model類和Controller類,及項目調試》
的最後一篇。
由於整個系列介紹得很詳細,篇幅較長,所以分成多篇博文進行敘述。個人建議從第一篇博文開始閱讀。

2.安裝IIS

2.1 Windows 10安裝IIS

首先,在“控制面板”中找到“程序”,如下圖:
在這裏插入圖片描述
進入後,點擊“啓用或關閉Windows功能”,然後找到“Internet Information Services”,選擇你所需要的IIS功能即可。我的選擇如下圖:
在這裏插入圖片描述
點擊確定,即可自動完成安裝IIS。

2.2 Windows Server 2016安裝IIS

在Windows Server的“服務器管理器中”,選擇“添加角色和功能”,如下圖:
在這裏插入圖片描述
一路“下一步”,如下圖:
在這裏插入圖片描述
在這裏插入圖片描述
然後在“服務器角色”這裏,找到“Web服務器(IIS)”,然後勾選所需的功能即可,如下圖:
在這裏插入圖片描述
最後點擊完成後,Server中就會自動安裝IIS的相關功能,如下圖:
在這裏插入圖片描述

3.發佈項目

發佈項目,我採用的是Vistual Studio發佈到本地文件夾中的方式。

在VS中點擊“生成”,然後選擇“發佈”,如下圖:
在這裏插入圖片描述
然後選擇“啓動”,進入“選取發佈目標”頁面,選擇“文件夾”,如下圖:
在這裏插入圖片描述
然後選擇“創建配置文件”,點擊“編輯”,進入“發佈”頁後,點擊“下一頁”,如下圖:
在這裏插入圖片描述
最後,選擇“配置”爲“Release”,選擇“目標框架”爲“netcoreapp3.0”,選擇“部署模式”爲“獨立”,選擇“目標運行時”爲“win-64”,並勾選“在發佈前刪除所有現有文件”,最後點擊“保存”即可。如下圖:
在這裏插入圖片描述
點擊“發佈”,VS就會將項目代碼以及所有的依賴全部發布到本地文件夾中,如下圖:
在這裏插入圖片描述
文件夾下如圖:
在這裏插入圖片描述
如果你的IIS文件夾是在自己電腦上,想要部署到遠程的Server上的話,就直接把此文件夾複製到Server上即可。

4.將項目部署到IIS Web Site上

4.1 新建並配置應用程序池(Win10/Server通用)

IIS Web Site的運行依賴於應用程序池(Application Pool),所以需要先創建應用程序池。

在IIS管理器中的左側,選擇“應用程序池”,然後選擇“添加應用程序池”。接着填項完名稱後,記得將“.NET CLR版本”一項選擇爲“無託管代碼”,以及將“託管管道模式”一項選擇爲“集成”,如下圖:
在這裏插入圖片描述
創建好應用程序池後,爲了避免IIS Web Site對系統無權限調用等亂七八糟的問題,需要對其使用賬戶進行額外的設置。

選擇創建好的應用程序池,我這裏名爲“DocReaderServicePool”,點擊“高級設置”,找到“進程模型”一欄,然後點擊“標識”。彈出新窗口後,選擇“自定義賬戶”,並輸入有權限的用戶名和密碼,如下圖:
在這裏插入圖片描述

4.2 新建並配置Web Site(Win10/Server通用)

創建好應用程序池後,開始新建網站。

點擊“網站”,選擇“添加網站”,然後填寫網站名稱,以及選擇項目發佈後的本地的代碼和可執行程序的路徑。記得還要將網站的應用程序池選擇爲上一節中所創建的池子(否則IIS會自動創建一個與網站同名的應用程序池),如下圖:
在這裏插入圖片描述
然後選擇“連接爲”,修改爲“特定用戶”,然後填寫有權限的用戶名和密碼,如下圖:
在這裏插入圖片描述
修改了用戶之後,最好驗證一下,點擊“測試設置”,測試連接的結果沒有異常即可,如下圖:
在這裏插入圖片描述
最後,選擇IP地址,並設置一個未被佔用的端口號即可,如下圖:
在這裏插入圖片描述
點擊確定後,網站就創建好了。

但是彆着急,你現在直接點擊瀏覽,或者在外網調用網站的接口,肯定是會報錯的哈哈。所以耐心點,我們繼續進行接下來的配置。

4.3 DCOM組件配置(Win10/Server通用)

由於程序會調用Office軟件的DCOM組件,所以對於DCOM組件的權限我們還需要進行配置。

首先,運行“dcomcnfg”打開組件服務,如下圖:
在這裏插入圖片描述
然後在“組件服務”-“計算機”-“我的電腦”-“DCOM配置”下,找到所有Office的DCOM組件,然後挨個右鍵點擊“屬性”,將“常規”tab下的“身份驗證級別”選擇爲無,如下圖:
在這裏插入圖片描述
然後切換到“安全”tab下,將三項權限全部改爲“自定義”,並挨個添加“IIS_IUSRS”用戶,然後賦予權限,如下圖:
在這裏插入圖片描述
最後切換到“標識”tab下,選擇“下列用戶”,然後輸入用戶名密碼,如下圖:
在這裏插入圖片描述

4.4 安裝AspNetCoreModule(Win10/Server通用)

在Server或者本地的環境中,如果要運行ASP.NET Core的項目,是需要.NET Core Runtime的支持纔行(不是SDK,只裝SDK是沒有用的)。

進入官網下載地址: https://dotnet.microsoft.com/download
然後點擊下載並安裝.NET Core Runtime,如下圖:
在這裏插入圖片描述
安裝完成後,在IIS的網站的模塊中,如果能查看到AspNetCoreModule,就意味着安裝成功了,如下圖:
在這裏插入圖片描述

4.5 Windows Server防火牆設置

不同於Win10,默認的Windows Server安全性控制等級很高,所以我們還需要調整“Windows防火牆”的相關設置,以允許外網對特定的端口進行訪問調用。
在“服務器管理器”的“本地服務器頁面”,找到“Windows防火牆”一項,進入後選擇“高級設置”,打開“高級安全Windows防火牆”頁面,如下圖:
在這裏插入圖片描述
(由於我這裏只是個demo,方便起見我直接把Server的防火牆給關了~~)

首先,選擇“Windows防火牆屬性”,找到“IPSec設置”,選擇“IPSec免除”,如下圖:
在這裏插入圖片描述
然後,點擊“入站規則”,選擇“新建規則”,規則類型選擇爲“端口”,然後添加我們新建的IIS Web Site的端口即可,如下圖:
在這裏插入圖片描述
至此,所有的項目和環境配置就都完成了。
在這裏插入圖片描述

5.驗證IIS Web Site

5.1 驗證Windows 10的IIS Web Site

由於我在自己的Win10電腦上裝了IIS,也部署了項目,所以先在Win10上驗證下項目的接口好不好使,如下圖:
在這裏插入圖片描述
完美!

5.2 驗證Windows Server 2016的IIS Web Site

然後測試下服務器上的接口,如下圖:
在這裏插入圖片描述
完美!

6.常見錯誤及解決方案

下述這些問題全都是我親自經歷的,如果能夠幫到你,希望能爲我的博文點個贊~

6.1 IIS Web Site無法啓動

在IIS管理器中新建好IIS後,無法啓動。

原因可能是網站的連接權限問題,或者應用程序池的配置問題。

請參考本文:
4.2 新建並配置Web Site(Win10/Server通用)”一節中,將網站的“連接爲”修改爲“特定用戶”的步驟。
以及:
4.1 新建並配置應用程序池(Win10/Server通用)”一節中,將應用程序池的“.NET CLR版本”一項選擇爲“無託管代碼”,以及將“託管管道模式”一項選擇爲“集成”的步驟。

6.2 網頁報錯“HTTP 錯誤 500.19 - Internal Server Error ”

IIS網站創建好後,點擊瀏覽網站,瀏覽器頁面報錯“HTTP 錯誤 500.19 - Internal Server Error ”。

這個問題的原因是當前運行環境沒有安裝AspNetCoreModule。

請參考本文:
4.4 安裝AspNetCoreModule(Win10/Server通用)”這小節的操作步驟。

6.3 接口報錯“Retrieving the COM class factory … failed … error:8007005”

調用項目的接口並上傳office系列文件時,接口報錯“Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒絕訪問”。

這個問題的原因是Office的DCOM的權限配置有問題。

請參考本文:
4.3 DCOM組件配置(Win10/Server通用)”這小節的操作步驟。

6.4 接口報錯“Microsoft Excel 不能訪問文件…”

調用項目的接口並上傳Excel文件時,接口報錯“Microsoft Excel 不能訪問文件“E:\workspace\Demo\DocReaderWebAPIDemo_IIS\uploads\5 pages.xls”。 可能的原因有以下幾個:\n\n• 文件名稱或路徑不存在。\n• 文件正被其他程序使用。\n• 您正要保存的工作簿與當前打開的工作簿同名。”

這個問題的原因並不是路徑或者讀寫的問題,它其實也是Office的DCOM的權限配置有問題。

請參考本文:
4.3 DCOM組件配置(Win10/Server通用)”這小節的操作步驟。

6.5 接口報錯“Insufficient memory to continue the execution of the program.”

調用項目的接口並上傳PPT文件時,接口報錯“Insufficient memory to continue the execution of the program.”

這個問題的原因並不是內存不足的問題,它其實也是Office的DCOM的權限配置有問題。

請參考本文:
4.3 DCOM組件配置(Win10/Server通用)”這小節的操作步驟。

6.6 接口報錯“拒絕訪問”

調用項目的接口並上傳office系列文件時,接口報錯“拒絕訪問”。

由於項目的代碼中會調用系統的process,然後殺Office的進程等,所以這個問題的原因是IIS沒有調用系統process的權限。

請參考本文:
4.1 新建並配置應用程序池(Win10/Server通用)”這小節的操作步驟,修改應用程序池高級設置-進程模型-標識,選擇有權限的用戶例如admin。

6.7 接口報錯“8000401a 因爲配置標識不正確,系統無法開始服務器進程,請檢查用戶名和密碼”

調用項目的接口並上傳office系列文件時,接口報錯“8000401a 因爲配置標識不正確,系統無法開始服務器進程,請檢查用戶名和密碼”。

這個問題的原因還是Office的DCOM的權限配置有問題。

請參考本文:
4.3 DCOM組件配置(Win10/Server通用)”這小節的操作步驟。

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