C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)6 -將項目部署到IIS,及常見錯誤解決方案
- 1.前言
- 2.安裝IIS
- 3.發佈項目
- 4.將項目部署到IIS Web Site上
- 4.1 新建並配置應用程序池(Win10/Server通用)
- 4.2 新建並配置Web Site(Win10/Server通用)
- 4.3 DCOM組件配置(Win10/Server通用)
- 4.4 安裝AspNetCoreModule(Win10/Server通用)
- 4.5 Windows Server防火牆設置
- 5.驗證IIS Web Site
- 6.常見錯誤及解決方案
- 6.1 IIS Web Site無法啓動
- 6.2 網頁報錯“HTTP 錯誤 500.19 - Internal Server Error ”
- 6.3 接口報錯“Retrieving the COM class factory ... failed ... error:8007005”
- 6.4 接口報錯“Microsoft Excel 不能訪問文件...”
- 6.5 接口報錯“Insufficient memory to continue the execution of the program.”
- 6.6 接口報錯“拒絕訪問”
- 6.7 接口報錯“8000401a 因爲配置標識不正確,系統無法開始服務器進程,請檢查用戶名和密碼”
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通用)”這小節的操作步驟。