讓 IIS EXPRESS 的網站允許外部連接(allow remote access)

讓 IIS EXPRESS 的網站可以被對本機以外提供服務

前端、行動裝置再加上愈來愈多的 IOT 相關應用出現,後端工程師最大的功能大概就是提供 API 了吧(^^||) 透過將開發用的 IIS EXPRESS 直接用來驗證結果是否合乎預期,就能減少頻繁地部署程式到實體 IIS 上的時間跟動作,又可以查更多bug(大誤)

利用這樣的方式讓在同網段的其他裝置可以直接連進來,甚至還可以直接 attach IIS EXPRESS 進行 debug,聽起來是不是很誘人?!

btw:這適合開發人員自行測試 debug 用,如果要跟其他裝置整合還是應該透過 IIS 部署

1. 設定 HTTP.sys (Hypertext Transfer Protocol Stack )

Note: 關於 HTTP.sys

  • IIS 6 時開始用來取代 Windows Sockets API
  • HTTP.SYS 是 IIS 的核心元件,用來處理 Http request
  • 在 IIS 建立新應用程式集區(application pool)時,會自動在 http.sys 註冊集區以用來識別.
  • 1-1. 以管理者身份開啟命令提示字元(command line)

    cmd

  • 1-2. 取得本機內網 ip

    • ipconfig

      ip

  • 1-3. 取得 IIS EXPRESS 站台 PORT

    • 方法1:專案設定

      port2

    • 方法2:IIS EXPRESS 快顯視窗中

      port1

  • 1-4. 使用 netsh本機 IP站台 port 加入 URL 保留區(access control list)

    netsh http add urlacl url=http://192.168.31.102:10777/ user=everyone
    

    added

  • 1-5. 檢查設定(optional)

    netsh http show urlacl
    
  • 刪除設定(if need)

    如果已經測試完畢,才需要進行刪除

    netsh http delete urlacl url=http://192.168.31.102:10777/
    

2. 修改 IIS EXPRESS 設定

  • 2-1. IISEXPRESS 8.X (VS 2013) 以前

    %USERPROFILE%\Documents\iisexpress\config\applicationhost.config
    
  • 2-2. IIS Express 10(VS 2015)

    改放在專案下的 .vs\config 資料夾中

    %USERPROFILE%\Documents\Visual Studio 2015\Projects\TestExceptional\.vs\config\applicationhost.config
    
  • 2-3. 加上 binding

    用 port 搜尋,複製現有的,把 localhost 改為 本機內網 IP

    <binding protocol="http" bindingInformation="*:10777:192.168.31.102" />
    

    binding

3. 開放防火牆的特定連接埠(port)

  • 3-1.開始 搜尋 wf.msc wf.msc

  • 3-2. 新增 inbound 規則

    newrule

  • 3-3. 建立 port 規則

    PORT

  • 3-4. 使用 TCP特定 port

    TCP

  • 3-5. 選擇 allow the connect

    ALLOW

  • 3.6. 預設即可

    WHEN

  • 3-7. 建立規則名稱

    NAME

4. 效果

  • 修改前(無法存取 IIS EXPRESS 站台)

    cannotaccess

  • 修改後(可以存取 IIS EXPRESS 站台)

    access

參考資料

  1. MSDN http https
  2. MSDN-IIS EXPRESS
  3. Nestsh commands for HTTP
  4. VS2015的IISEXPRESS 10的APPLICATIONHOST.CONFIG置叨位
  5. Access IIS Express from another machine