Visual Studio 2015 無法起始 IIS Express 進行偵錯的問題

最近撰寫程式時,使用 Visual Studio 2015 起始偵錯時,居然會失敗,點選執行後,約過了幾秒鐘後,Visual Studio 2015 又退回到原來的畫面,查看右下角,IIS Express也沒有啟動,奇怪,昨天可以正常執行的專案,今天卻完全無法執行?到底怎麼回事?

緣由

最近撰寫程式時,使用 Visual Studio 2015 起始偵錯時,居然會失敗,點選執行後,約過了幾秒鐘後,Visual Studio 2015 又退回到原來的畫面,查看右下角,IIS Express也沒有啟動,奇怪,昨天可以正常執行的專案,今天卻完全無法執行,是連 IIS Express 都無法啟動。

 

判斷問題

這時馬上又啟動了內心那一股 Troubleshooting 的那一股初心,誓言就是想要查出問題到底在哪?初步研判,應該是 IIS Express 啟動失敗,於是想,這一類的應用程式啟動失敗必定留下事件紀錄,於是馬上到 EventLog 查看,果不其然,在事件檢視器裡的 [應用程式] 發現如下紀錄:

 

從事件訊息的意思上來了解,是要開始進行 HTTP 通訊時,啟動核心的 http.sys 元件時,可能因為不正確的設定導致 IIS Express 啟動失敗,真是從來沒遇過的問題 =.=

根據事件的ID與來源在網路上找到官方的說明:

https://technet.microsoft.com/en-us/library/dd316026(v=ws.10).aspx

 

根據說明中所提到的解決方案,可以使用 [本機群組原則編輯器] 到 [Windows 設定]\[安全性設定]\[畚箕原則]\[使用者權限指派] 下面的 [略過周遊檢查] 裡,將 EveryOne 與 Users 的角色加入。但是我點開時發現,我的本來就存在了!

而且,就算我將 w3svc & http 這兩個服務重新啟動後,也還是一樣,這時,又使案情陷入了膠著之中。

但是,以前在公司裡就被稱為為 Troubleshooting 的狂人的我,怎麼可以就此打住?一定要把原因查出來才可以。

皇天不復苦心人,讓我找到一篇文章,文章中所描述的狀況、發生的錯誤內容與我完全相同。

 

且內容中提到,可試試透過設定 HTTP URL 命名空間保留區來解決此問題,透過下面的命令(中間的 port 要換成你的):

netsh http add urlacl url=http://localhost:8999/ user=everyone

 

執行完畢的畫面如下:

有趣的是,執行完畢後,在執行剛剛執行不起來的專案居然成功的執行起來了。由最下方的說明了解到可能是 ACL 的項目裡有衝突的項目,但是心中還是有些疑惑,到底是為什麼,自己判別主要原因是因為對於 HTTP 設定通訊的底層作業不了解的關係,於是繼續爬文了解 netsh 指令中的 urlacl 的意義是什麼。

後來爬到下面文章後了解,原來應用程式要進行  HTTP 通訊時,必須將該 HTTP URL 的權限指派給特定的使用者群組,而在 IIS 下面,這個動作通常都是 IIS 建立應用程式時自動幫您設好,但如果您是使用 Self-Host 啟動 HTTP 通訊時,這個動作就是透過命令來達成,而且在 Windows 2003/XP 時代是使用 HttpCfg.exe 工具來達成,在 Windows 7 之後的系統是使用 netsh.exe 命令列工具來達成。

後記

每次查到最後都會發現,我不懂的底層知識還是太多了,每每還是只能透過每一次的 Troubleshooting 之中來學習,讓自己更了解這些運作的細節。

 

參考資料:

http://social.technet.microsoft.com/wiki/contents/articles/21750.event-id-2269-iis-worker-process-availability.aspx

https://technet.microsoft.com/en-us/library/dd316026(v=ws.10).aspx

http://blog.700cb.net/2015/05/iisexpress-error-description-access-is-denied-0x80070005/

https://msdn.microsoft.com/zh-tw/library/ms733768(v=vs.110).aspx

 


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^