IISExpressがリモートマシンから503エラーを返す


183

ローカルIIS Expressインスタンスで実行しているWebサイトを、ローカルネットワーク上の他のマシンやデバイスでテストしようとしています。Win7 Proを実行しています。

ローカルネットワークセグメント上の別のマシンから自分のマシンを初めて参照しようとすると、400エラーが発生します。ホスト名が無効です。

管理者特権のコマンドプロンプトで次のようなコマンドを使用して、ACLへのリモートアクセスを許可する必要があることを理解しています。

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

503サービスが利用できませんというエラーが表示されます。

Windowsファイアウォールは現在シャットダウンされており、ローカルのIISExpressインスタンスをアドレスで参照できます http://localhost:50333

この構成パズルの最後のピースは何ですか?


1
あなたが閲覧した場合はどうなりますhttp://mymachinename:50333/ から、あなたのコンピュータ?
大佐パニック

1
問題は解決されました。vikomallから承認された回答を見る
ジェフフリッツ

1
ここでは、こののより深い議論:hanselman.com/blog/...
クリスMoschini

3
あなたはこの問題の周りを取得するために私達の自由VS拡張子「コンベア」をインストールすることができmarketplace.visualstudio.com/...を
ジム・WはREINSTATEモニカ言う

回答:


270

applicationhost.configファイルにバインディング情報エントリがないようです。

  1. applicationhost.configファイルを開きます。可能な場所は次のとおりです。

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • それが失敗した場合は、からの出力を調べてiisexpress.exe確認してください。
  2. WebSiteエントリを見つけ、次のバインディングをマシン名に追加します。

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. IIS Expressを再起動します


9
気にしないで。Visual Studioにより、アイテムの構成エントリが重複して作成されました。私はそれを削除し、それはうまくいきました。
nuzzolilo 2012年

3
IIS Expressは、常にそのパスにある構成ファイルを使用するわけではありません。からの出力をiisexpress.exe注意深く読んで、使用している構成ファイルを確認してください。
大佐パニック

5
キーポイントアイテム3、IIS Expressを再起動します。システムトレイでアイコンを見つけて停止し、強制的に再起動します。よりエレガントな方法があるかどうかはわかりません。しかし、これでうまくいきました。ありがとう!
上院議員

9
すべてのホスト名/
IPアドレスの

4
もう1つのヒント:IISExpressのシステムトレイアイコンを右クリックすると、[すべてのアプリケーションを表示]を選択できます。これにより、現在ローカルで実行しているすべてのアプリケーションを示すダイアログが開きます。目的のアプリケーションを右クリック(左クリックしないでください。そうしないとブラウザが開きます)すると、下に「パス」と「構成」が表示されます。[Config]を左クリックすると、関連するApplicationhost.configファイルが開き、上記のようにバインディングを追加/編集する必要があります。これは、現在の構成を見つける簡単な方法です。
マット

31

私にとってうまくいったことは1つだけでした。

使用*:portnumber:*は良くありませんでした。はい、それを実行し、Windowsファイアウォールが開いていることを確認した後、ポートに接続できましたが、それでも「503」エラーが発生しました。

私はいくつかのことをローカルでテストし、http:// localhostだけが機能することを発見しました。実際のIPアドレス(127.0.0.1ではなく、たとえば192.168.1.50)を使用すると、ローカルマシンでも503が返されます。バインディングで実際のホスト名を使用してみましたが、IIS Expressは起動を拒否しました。これは実際には、ホスト名の解決方法に関係している可能性があります。それ以上は探りませんでした。

最後に、私はこの構成を使用することになりました。

<binding protocol="http" bindingInformation="*:53351:localhost" />
<binding protocol="http" bindingInformation="192.168.1.50:53351:*" />

このようにして、リモートマシンからを使用して接続することができましたhttp://192.168.1.50:53351


この正確なエラーが発生しましたが、現在のIPが変更される可能性があるため、構成にハードコードしたくありませんでした。ワイルドカードがIPとホスト名の部分で機能することを発見したので、私は次のようになりました:<binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> 編集:SOマークダウン を理解しようとしましたが、やめました:)。
ブライアンバーカー

19

そのような完全な主題で3時間以上無駄にした後、私はあなたと私のセットアップを共有することにしました。私の構成は、Windows 8でのVisual Express 2012 for Web update 4です。これは、研究(少なくとも8年)以来、初めてMS VSに戻ってきたものであり、今やLinuxルールに確信があります。djangoでは、この種の設定により、ドキュメントの検索に10分かかりました。

  1. テストのためにファイアウォールをオフにする

    netsh advfirewall set allprofiles state off
    
  2. 私の場合のバインドのセットアップはローカルアドレスがlocalIP = 192.168.1.102です(リンクには非数値ドメインを含めることができないため、mylocaldomain.comの代わりに以下を使用してください。stackoverflowポリシーを参照してください) Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. ISS Express開始サービスの自動実行を自動的に追加します

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. httpサーバーにいくつかの奇妙なルールを追加します(これが必要かどうかはまだわかりません)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. VS IDEからではなく手動でIISExpressを実行する

  6. ISSExpressがバインディングを登録していることがわかります
  7. ブラウザhttp://mylocaldomain.com:53351 が動作している場合は、ファイアウォールルールを追加できます。
  8. ファイアウォールルールを追加

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

ローカルネットワークにアクセスする場合はlocalsubnetを使用し、外部からサーバーにアクセスする場合はremoteipをanyに設定します。

  1. ファイアウォールを開始する

    netsh advfirewall set allprofiles state on
    
  2. すべてがローカルおよびパブリックIPで機能しているかどうかを再度確認します

あなたの幸運を祈ります

ラファル


3
これにより、IIS Expressは、VS2013を管理者として実行せずに、VS8を使用するWin8で実行できなくなりました。これは、netshコマンドの結果として、現在IIS Expressが外部トラフィックを開こうとしていることが原因です。また、実際にそのトラフィックを処理することもできませんでした。私は503を取得します。この回答のnetshコマンドによって引き起こされる問題を元に戻すには、管理者として実行しているコマンドプロンプトからこれを実行netsh http delete urlacl url=http://*:55416/します(ポートを自分のポートに置き換えます)
Chris Moschini

fwiw-ステップ4は必要ありません(@Rafalが不明なnetsh呼び出しは必要です)。また、ソリューションでVS2013プロジェクトを実行するためにステップ2で「localhost」バインディングを必要としませんが、フロントその「localhost」バインディングが所定の場所に残されている場合、エンドの読み込みが大幅に速くなります。
lukkea

上記の手順を実行しても、引き続き503が使用されることがわかりましたlocalhost。ゲスト(Windows)のマシン名をのバインディングに含める必要がありapplicationhost.config、ホスト(Mac)の場合、ゲストマシン名をにマッピングする必要があることがわかりまし127.0.0.1/etc/hosts。その後のみ、ホスト上のゲストマシンへのリクエストが成功しました。
Matt

ステップ5への追加1つ。iisexpress.exe / siteid:idを使用します。idは、<site id = "id">設定でのサイトのid属性の値です。それ以外の場合は、最初のサイトが開始されます。
Mudit Jain

9

問題は不良なurlaclマッピングに関係していることがわかりました。これを理解するには:

netsh http show urlacl 

http://+:80/バインドしているポートなどを探します。

次に使用します

netsh http delete url=<the url from the list>

これで問題が解決しました。


4
netsh http delete urlacl url = <リストからのURL>である必要があります。これでうまくいきました!
sergiogx 2016

1
これについては、msdnブログで詳しく説明しています。これは最終的には私の問題でもありました。
Kevin Scharnhorst 2017年

3
おかげで、正確な構文は次のとおりですnetsh http delete urlacl <yoururl>
yoel halb

7

何もうまくいきませんでした。最後に私はiisexpress-proxyを見つけました

私の答えを見るhttps://stackoverflow.com/a/33623399/631527

別の解決策は ngrok


すごい!私は他のすべてのソリューションを試しましたが、どちらも機能しませんでした。「不正なリクエスト」または「サービスを利用できません」。複雑すぎる。ノードモジュールをインストールして実行したところ、すぐに動作しました!!
TetraDev 2016年

動く!聖なる!ありがとうございました!
Ayson Baxter

ngrokもチェックしてください
Toolkit

1
それは単にngrokの魅力のように動作します!最初にlocalhostからiis-proxyにルーティングし、次にプロキシからngrokにルーティングするのは奇妙ですが、うまくいきました!。たとえば、ポートにiisexpressがあります3028。走ったiisexpress-proxy 3028 to 12345あと./ngrok.exe http 12345。😅
リウエルリベイロ

@TetraDev、「Bad request」または「Service unavailable」は、ngrokからlocalhostにアクセスするときに受信したホストヘッダーが、ここで
Dani Torres

3

私を助けたのは、「IISExpress」アイコン「すべてのアプリケーションを表示」を右クリックしたことです。次に、Webサイトを選択すると、どのaplicationhost.configが使用されているかがわかり、修正は完全に行われました。

IISExpress構成


1

問題は、ソリューションの代わりにwebフォルダー内のapplicationhost.configファイルを更新することです。ソリューション構成ファイルは変更するものです


1

@vikomallの解決後、VSを管理者として開始することを忘れないでください。これで修正されます。


0

Anthony Rizzoloの回答について:Windows 8.1では、次のように入力する必要がありました。

netsh http delete urlacl url=<the url from the list>

例えば:

netsh http delete urlacl url=http://+:8689/

0

上記の答えはどれもうまくいきませんでした。

同じサービスのnetshに2つのエントリがあります

netsh http show urlacl

ここに画像の説明を入力してください

1つは強いワイルドカードを使用し、もう1つは弱いワイルドカードを使用します。

弱いワイルドカードを持つものを削除することで、うまくいきました。

netshのコンテキストでの強いワイルドカードと弱いワイルドカードの詳細

UrlPrefixのホスト要素が単一の正符号(+)で構成されている場合、UrlPrefixは、そのスキーム、ポート、およびrelativeURI要素のコンテキストで考えられるすべてのホスト名に一致し、強力なワイルドカードカテゴリに分類されます。

ホスト要素としてアスタリスク(*)が表示される場合、UrlPrefixは弱いワイルドカードカテゴリに分類されます。この種類のUrlPrefixは、指定されたスキーム、ポート、および相対URIに関連付けられている、強いワイルドカード、明示的、またはIPバインドされた弱いワイルドカードのUrlPrefixにまだ一致していないホスト名に一致します。このホスト仕様は、状況によってはデフォルトのキャッチオールとして使用できます。また、多数のUrlPrefixを使用する必要なく、URL名前空間の大きなセクションを指定するために使用できます。

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.