web-dev-qa-db-ja.com

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

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

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

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

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

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

Windowsファイアウォールは現在オフになっており、アドレスhttp://localhost:50333を使用してローカルIISExpressインスタンスを参照できます

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

177
Jeff Fritz

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

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

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

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

262
vikomall

私のために働いたことが一つだけありました。

*: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を使用してリモートマシンから接続できました。

29
The Lizard

このような完全なテーマで3時間以上無駄にした後、セットアップを共有することにしました。私の構成は、Windows 8でのWeb更新4用のVisual Express 2012です。これは、研究(少なくとも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エクスプレススタートサービスの自動実行を自動的に追加

    <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で機能しているかどうかをもう一度確認します

あなたの幸運を祈ります

ラファル

18
Rafal

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

netsh http show urlacl 

http://+:80/やバインド先のポートなどを探します。

次に使用する

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

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

6
Anthony Rizzolo

私には何も機能しませんでした。最終的に私は見つけました iisexpress-proxy

私の答えを参照してください https://stackoverflow.com/a/33623399/631527

別の解決策はngrokです

5
Toolkit

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

IISExpress configuration

3
Emmanuel

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

1
Victor Arce

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

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

netsh http show urlacl

enter image description here

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

弱いワイルドカードを持つものを削除すると、仕事をしました。

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

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

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

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

0
matcheek

@vikomallの解決後、VSを管理者として起動することを忘れないでください。これは私のためにそれを修正します。

0
Rapido

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

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

例えば:

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