Help us understand the problem. What is going on with this article?

IIS Express を外部公開する

More than 1 year has passed since last update.

背景

Mac上の仮想環境上のWindows上でAPS.Netアプリケーションを開発しているときに

  1. ゲストOS(Windows)上のIIS Expressでアプリケーションを実行
  2. ホストOS(MacOS)上のブラウザで動作を確認

したいことがあります。
クライアント側のJavaScript部分をReactなどで実装している場合、Reactの開発にはOSの縛りがありません。
ホストOS上の方がファイルの編集・実行が速いので、Reactアプリケーションの

  1. 編集
  2. ビルド

をホストOS上でしたいです。

このために、IIS ExpressをLAN上に公開したいです。

環境

  • Windows 10 Pro
  • Visual Studio Community 2015 update2
  • IIS 10.0 Express

手順

解決すべき課題

  1. IIS Expressはデフォルトでlocalhost:xxxxにバインドされる。ドメイン名やIPアドレスでアクセスできない
  2. Windowsは、ファイアーウォールで外部からのアクセスを禁止している
  3. localhost以外にバインドしてIIS Expressを起動するには管理者権限が必要

IIS Expressを任意のアドレスにバインド

applicationHost.configを編集する必要があります。Visual Studio 2015では

IIS Expressでlocalhost以外のアドレスでアクセスする方法 - なか日記

プロジェクトの設定で「すべてのユーザーにサーバー設定を適用(プロジェクト ファイルに格納)」にチェックが入っている場合は、ソリューションを保存してるフォルダにある .vs (隠しフォルダ)に applicationhost.config が格納されいる

.vs/config/applicationHost.configを編集します。

<site name="ApiServer" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="\\vmware-host\Shared Folders\shigerunakajima\slot-marketing-dashboard\ApiServer" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:56043:localhost" />
    </bindings>
</site>

のような定義があります。バインドしたいIPアドレス・ドメイン名を設定します。
IPアドレス192.168.0.65を設定したい場合は

<binding protocol="http" bindingInformation="*:56043:192.168.0.65" />

を追加します。

<site name="ApiServer" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="\\vmware-host\Shared Folders\shigerunakajima\slot-marketing-dashboard\ApiServer" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:56043:localhost" />
        <binding protocol="http" bindingInformation="*:56043:192.168.0.65" />
    </bindings>
</site>

この状態で、IIS Expressを起動します。
ゲストOS(Windows)から接続するとBad Request - Invalid Hostnameが表示されます。

スクリーンショット 2016-06-27 16.25.06.png

回避するには Visual Studioを管理者権限で起動 します。

外部からアクセス

この時点ではホストOS外部から接続するとTimeoutします。
Windowsのファイアーウォールに阻まれます。

  1. Cortanaにfirewallと入力しエンターキーを押します。
  2. 操作(A) > 新しい規則(N)...
  3. 規則の種類ポート(O)を選択
  4. 次へ(N)をクリック
  5. 特定のローカルポート(S):56043を入力
  6. 次へ(N)をクリック
  7. 接続を許可する(A)を選択
  8. 次へ(N)をクリック
  9. この規則はいつ適用しますか?はデフォルトのまま
  10. 次へ(N)をクリック
  11. 名前(N):iis expressを入力
  12. 完了(F)をクリック

ポートや規則の名称は好きな値に設定してください。

管理者権限を使わずにIIS Expressを起動

上手くいきませんでした。

IIS Express で仮想サイトに複数のホスト名を割り当てる - しばやん雑記

netsh http add urlacl を叩けば管理者権限が要らない

と言う情報があります。実際に

netsh http add urlacl url=http://192.168.0.65:56043/ user=Everyone

を実行すると、デバック実行時にIIS Express Web サーバーを起動できません。と、表示されるようになります。
Visual Studio を管理者権限で起動すると、IIS Expressが起動できます。

次のパターンで試しました。

netsh http add urlacl url=http://192.168.0.65:56043/ user=luxiar201508\shigeru.nakajima
netsh http add urlacl url=http://192.168.0.65:56043/ user=shigeru.nakajima
netsh http add urlacl url=http://192.168.0.65:56043/ user=Administrator
netsh http add urlacl url=http://192.168.0.65:56043/ user=BUILTIN\Users
netsh http add urlacl url=http://192.168.0.65:56043/ user=BUILTIN\Administrators
netsh http add urlacl url=http://+:56043/ user=everyone

いずれも結果は同じでした。

Is netsh http add urlacl broken in Windows 10? - Microsoft Community が近いように思えます。回答はありません。

参考

ledsun
編集リクエスト、コメント大歓迎です。
luxiar
Ruby on Rails専門のWebアプリケーション開発に特化した町田の受託開発企業です
http://www.luxiar.com/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした