IIS Expressで外部リクエストを有効にする方法は?


466

IIS Expressでリモート要求を有効にするにはどうすればよいですか?スコット・ガスリーはそれが可能であると書いたが、彼はどのように述べなかった。


25
私たちが書いたのはこのための無料のVSの拡張機能がありますvisualstudiogallery.msdn.microsoft.com/...が
ジム・WはREINSTATEモニカ言う

@JimWジム、あなたはプラグインの作成者ですか?このソフトウェア工学の奇跡がどのように機能するか説明していただけますか?
Ian Warburton 2017年

@IanWarburtonそれを奇跡と呼んでくれてありがとう!リバースプロキシサーバーです。
ジムWはモニカ

@JimW作成していただきありがとうございます。
Ian Warburton 2017年

@JimW私はあなたのプラグインを試しました、そしてあなたがチュートリアルで言ったようにすべてを行います。しかし、私は自分のローカルホストに
アクセス

回答:


403

IISチームサイトにブログ投稿があり、IIS Expressでリモート接続有効にする方法が説明されています。その投稿の関連部分を要約すると次のようになります。

VistaおよびWin7では、管理プロンプトから次のコマンドを実行します。

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

XPの場合、最初にWindows XP Service Pack 2サポートツールをインストールします。次に、管理プロンプトから次のコマンドを実行します。

httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)


121
:503エラーが発生した場合には、この参照stackoverflow.com/questions/5442551/...
deerchao

5
任意のホスト名でnetsh接続を許可するコマンドはありますか?
大佐パニック

33
参考までに、Windowsマシンに英語以外の言語を使用している場合、のパラメーターはuser={PARAM_USER}自分の言語になります。
GoRoS 2014年

7
urlパラメータでワイルドカードを使用すると(例:url = http:// *:8080 /)、ホスト名とコンピュータのIPアドレスの両方で接続が機能します。
アンデルス

2
コマンドが失敗した場合(おそらくエラー1789)は、コマンドがPC言語でユーザーに期待されることを考慮してください。たとえば、PCがポルトガル語の場合は、のuser=todos代わりにを使用してくださいuser=everyone
Vitor Canova

350

必要な変更が3つあります。

  1. IIS Express自体にすべてのIPアドレスとホスト名にバインドするように指示します。あなたの中.configのファイル。通常:
    • VS 2015: $(solutionDir)\.vs\config\applicationhost.config
    • <VS 2015: %userprofile%\My Documents\IISExpress\config\applicationhost.config

サイトのbinding要素を見つけて追加します

    <binding protocol="http" bindingInformation="*:8080:*" />
  1. 「http.sys」というWindowsのビットを設定します。管理者として、次のコマンドを実行します。
    netsh http add urlacl url=http://*:8080/ user=everyone

everyoneWindowsグループはどこにありますか。「Tout le monde」のようなスペースのあるグループには二重引用符を使用します。

  1. Windowsファイアウォールを介したIIS Expressの許可。

    開始/セキュリティが強化されたWindowsファイアウォール/受信規則/新しい規則...

    プログラム%ProgramFiles%\IIS Express\iisexpress.exe
    またはポート8080 TCP

起動iisexpress.exeすると、次のようなメッセージが表示されます

サイト「hello world」アプリケーション「/」のURL「http:// *:8080 /」が正常に登録されました


22
注意:ローカライズ版のWindowsを実行している場合users=everyonenetsh(2番目のステップ)のパラメーターがエラー1789を引き起こす可能性があります。解決策はeveryone、対応する言語のグループ名に変換することです。
mflodin 2013

5
Visual Studioプロジェクトでそのバインディングを受け入れるにはどうすればよいですか?プロジェクトプロパティでを指定するProject Urlと、ホスト名にアスタリスクを入力するとエラーが発生します。他に何か入力すると、新しい仮想ディレクトリを作成しようとします。application.configのエントリにはリンクしません。
Trevor Elliott

20
Visual Studioで機能させるには、手順1 bindingInformation="*:8080:hostname"と手順2 url=http://hostname:8080/でコンピューターのホスト名を使用し、WebタブのVisual Studio WebプロジェクトプロパティでProject Urlをに設定する必要がありhttp://hostname:8080/ます。*すでに作成している場合は、urlaclを削除します。両方ある場合は機能しません。最後に、WebブラウザーでアクセスするURLは、localhostではなく、ホスト名を参照する必要があります。
Joe Daley、2014

5
bindings要素にもlocalhost行を含める必要がありました。それ以外の場合、Visual Studio 2013は重複したサイトエントリを作成しようとしました。例:<binding protocol="http" bindingInformation="*:8080:localhost" />
kristianp 2014

3
また、管理者としてVisual Studioを実行する必要がありましたが、この答えが最も徹底的でした。
dlsso

127

数か月前にこのワークフローを試したときに、同じ問題に遭遇したことを覚えています。

これが、この種のシナリオ専用に単純なプロキシユーティリティを作成した理由です:https : //github.com/icflorescu/iisexpress-proxy

IIS Expressプロキシを使用すると、すべてが非常に簡単になります。「netsh http add urlacl url = vaidesg:8080 / user = everyone」や、「applicationhost.config」をいじる必要はありません。

コマンドプロンプトでこれを発行するだけです。

iisexpress-proxy 8080 to 3000

…その後、リモートデバイスをhttp:// vaidesg:3000にポイントできます。

ほとんどの場合、シンプルなほうが優れています。


3
素晴らしい解決策をありがとう!
夏時間

1
また、Azureはapplicationhost.configファイルを自動生成してバインディングの変更を消去するため、Azureで確実に機能するのはこのようなNode.jsソリューションだけであると付け加えます。
TheHansinator 2015

1
ngrokが期待どおりに機能しなかったため、私はMacでIIS Express Proxyをngrokとともに使用し始めました(必要なIIS Express構成操作を実行していなかったため)。とても便利な!ありがとうございました。
codeoutloud

1
これは、最も簡単な解決策です。必要がない場合は、applicationhost.configをいじらないようにしています。
skalpin '10年

4
優れたソリューション!次に戻って、IIS Expressで作成した混乱を元に戻します。
ミッチスチュワート

123

iisexpress-proxyが見つかるまで、何もうまくいきませんでした。

管理者としてコマンドプロンプトを開き、実行します

npm install -g iisexpress-proxy

その後

iisexpress-proxy 51123 to 81

Visual Studioプロジェクトがlocalhost:51123で開いていて、外部IPアドレスxxxx:81でアクセスしたい場合

編集:私は現在使用しています ngrok


7
痛みのないソリューション
バハディール2016年

4
私が見つけた最も簡単な解決策。iisexpressの転送以外にも使用できるため、おそらくパッケージの名前をweb-proxyのような名前に変更する必要があります:)
Mario Tacke

8
@xgp-こんにちは、私はiisexpress-proxyの作者です:-)結局あなたはそれをあなたのためにうまく動かすことができましたか?コマンドプロンプトを閉じて再度開くか、まれにosを再起動する必要があります。さらに質問がありましたら、プロジェクトページ(github.com/icflorescu/iisexpress-proxy)に一言お願いします。時間があれば、お手伝いします。
Ionut-Cristian Florescu 2016年

1
ご利用いただき、誠にありがとうございます:-) @MarioTacke-ええ、私は知っていますが、iisexpress-proxyと呼ばれていれば、google-ingするだけでより多くの人がそれを見つけることができます:-)
Ionut-Cristian Florescu

1
ところで、これはWindows認証では機能しません。
トム

35

これへの付記として:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

これは英語版のWindowsでのみ機能します。ローカライズされたバージョンを使用している場合、「everyone」を別のものに置き換える必要があります。次に例を示します。

  • オランダ語版使用時の「Iedereen」
  • ドイツ語版使用時の「ジェダー」
  • ハンガリー語版を使用する場合の「Mindenki」

そうしないと、エラーが発生します(SDDLの作成に失敗しました、エラー:1332)


33

良いリソースがある開発時のSSLを使用した作業がIISExpressと簡単ですScott Hanselmanにするます。

あなたがしているのは、IIS Expressをポート80経由で外部に提供するためのセクションです


このブログ投稿では、ポート80を「IISExpressWeb.exe」に分離することを推奨しています。IIS Expressの現在のバージョンには、この名前のexeがありません。IISExpress.exeとIISExpressTray.exeしかありません。どちらかに接続を分離すると、外部からの接続が防止されます。プロセスの制限を排除すると、接続が許可されます。対象となる適切な.exeは何ですか?
Chris Moschini、2012年

33

Visual Studioを使用している場合は、次の手順に従ってIIS-Express over IP-Adressにアクセスします。

  1. ホストのIPアドレスを取得する:ipconfigWindowsコマンドライン
  2. GoTo

    $(SolutionDir)\.vs\config\applicationHost.config
  3. 探す

    <site name="WebApplication3" id="2">
       <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" />
       </application>
       <bindings>
         <binding protocol="http" bindingInformation="*:62549:localhost" />
       </bindings>
    </site>
  4. 追加: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    IPアドレス

  5. 管理者権限でVisual Studioを実行すると、すべてが機能するはずです
  6. リモートから接続しようとした場合、ファイアウォールの問題を探している可能性があります

20

Visual Studio Professional 2015に「Conveyor by Keyoti」をインストールして解決しました。Conveyorは、外部リクエストを有効にするポート(45455)でリモートアドレス(IP)を生成します。例:

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

コンベアを使用すると、ネットワーク上の外部タブレットや携帯電話から、またはAndroidエミュレーター( http://10.0.2.2:<hostport>

手順は次のリンクにあります。

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti


@kilianellerは回答のリンクをたどり、そこで質問してください。私たちはあなたを助けることができます。
ジムWはモニカ

Workst !!、私は他のすべての解決策(change applicationhost.config、netsh、IPv6 adress ..)と何も証明しませんが、これをインストールすると最終的には機能しますが、唯一の小さな問題はIPアドレスを誤って送信したことですが、深刻な問題ではありません。
Ion

インストールは本当に簡単です。拡張機能のページの指示に従って、リモートブラウザに証明書を追加してください。
アンドレス

私はそれを信じることはできません、それはうまくいきます!とてもシンプルでとてもエレガントです!!! 私は最後の5時間を空の解決策を探すためだけに費やし、最後にこれを見つけました!
Ziggy192 2018

10

パニック大佐の答えを試したが、Visual Studioで機能しない場合は、次のことを試してください。

<binding />IIS Express構成に別のものを追加する

<bindings>
    <binding protocol="http" bindingInformation="*:8080:localhost" />
    <binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>

最後に、Visual Studioを管理者として実行する必要があります


残念ながら、私には
うまくいか

@ThomasTeilmannは、Visual StudioでWebアプリケーションのプロパティを開く必要があり、[Web]タブで、 "Project Url"を変更して、localhostではなく代替ホスト名を使用しました。
2015

@ThomasTeilmann、ああ、私はIPではなくホスト名で参照する必要があると思います。
2015

私は実際には、あまりにもその両方を試してみました、そしてそれは、クラウド・インスタンスの作業didntの:/おかげけれども
トーマスTeilmann

これは私にとっての答えでした(つまり、VSを管理者として実行します)-@Bruceに感謝します。さらに、ファイアウォールの設定を手動で修正する必要もありました。私の場合(つまり、私のiphoneが私の開発マシンを閲覧できることをテストする)ファイアウォールでポート8080を開くことは機能しませんでした(ええと?)。ネットワーク)トリックをしました。
Ilan、2016

9

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

IISExpress構成


2
この回答は別の解決策を示し、*:55665:localhostではなく:55665:を受け入れるようにapplicationhost.configを編集しました
Deko

@Dekoに感謝-あなたのコメントは、他のいくつかの返信で述べられているnetshコマンドと相まって、私にとってはうまくいきました。
Marcel Popescu、

8

これは、httpとhttpsの両方でリモートアクセスを有効にするためにVisual Studio 2015がインストールされたWindows 10で実行したものです。

最初のステップは、アプリケーションを内部IPアドレスにバインドすることです。cmd-> ipconfigを実行してアドレスを取得します。ファイル/{project folder}/.vs/config/applicationhost.configを開き、次のようなものが見つかるまで下にスクロールします。

<site name="Project.Web" id="2">
    <application path="/">
        <virtualDirectory path="/" physicalPath="C:\Project\Project.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:12345:localhost" />
    </bindings>
</site>

の下に2つの新しいバインディングを追加しますbindings。必要に応じてHTTPSも使用できます。

<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />

ファイアウォールに次のルールを追加し、新しいcmdプロンプトを管理者として開き、次のコマンドを実行します。

netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=12345 profile=private remoteip=localsubnet action=allow

netsh advfirewall firewall add rule name="IISExpressWebHttps" dir=in protocol=tcp localport=44300 profile=private remoteip=localsubnet action=allow

ここでVisual Studioを起動しAdministratorます。Webプロジェクトプロジェクトファイルを右クリックして、を選択しますPropertiesWebタブに移動し、をクリックしますCreate Virtual Directory。Visual Studioが管理者として実行されていない場合、これはおそらく失敗します。これですべてが機能するはずです。

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


私のために働いた!:)素敵なポストはここにもあります:blog.kloud.com.au/2017/02/27/...
Leniel Maccaferri

私はngrokを含む他のすべてを試しましたが、役に立たなかった これは最初の試行で機能しました。
kooldave98

5

この質問に対する受け入れられた回答は、IIS Expressをwebmatrixと連携させるためのガイドです。このガイドは、VS 2010で使用できるようにする場合に、より便利であることがわかりました。

手順3と4(管理者としてIIS Expressを実行)を実行しただけで、ファイアウォールを一時的に無効にして機能させる必要がありました。


Visual Studioからデバッグする機能を失うためにリンクする手順は、少なくとも私の見方では意味がありません-IISまたは他のリモートサーバーを使用することは(少なくともIISでリモートデバッグをセットアップできるため)同じです。IIS Expressがlocalhostなしで実行するために管理者権限を必要としなかった場合、これは機能します。とてもうるさい。
Chris Moschini、

これはまさに私が探していたものです-ありがとう!私はVisual Studio 2010でIIS Expressを使用していて、LANでASP.NET MVC3アプリケーションをテストしようとしていましたが、これが動作するために必要なものでした:)
Lasse Christiansen

5

IIS Expressの設定を変更したり、新しいHTTP.sysルールを追加したり、管理者としてVisual Studioを実行したりする代わりに、ポート転送を設定してみてください。

基本的に、IP:PORTあなたはあなたのウェブサイトの実行をあなたのマシンの他の空きポートに転送する必要がありますが、ローカルホストではなく外部ネットワークアダプター上で。

重要なのは、IIS Expressが(少なくともWindows 10では)[::1]:portIPv6ポートでリッスンするという意味にバインドされていることです。これを考慮に入れる必要があります。

これが私がこの作品を作った方法です-http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

それが役に立てば幸い。


私はWindows 10を実行していて、localhostをIPv6にバインドすることが重要でした。ありがとう!
TomaszGuzialek 2017年

構成しようとしたコンピューターには、別のローカルアドレスがありました。「local-dev」と名付けられました。私はそれを動作させるためにバインドv4tov6 listenport = 3000 connectaddress = local-dev connectport = 60000バインドする必要がありました。投稿ありがとうございます。
アニカ2017

4

私が見つけた最も簡単でクールな方法は使用することでした(セットアップには2分かかります):

https://ngrok.com/

これは、localhostで実行されているすべてのもので動作します。サインアップするだけで、実行可能ファイルをほとんど実行せず、localhostで実行するものはどこからでもアクセスできるパブリックURLを取得します。

これは、IISのセットアップやファイアウォールをいじる必要がなく、リモートチームの仲間に物を見せるために適しています。実行可能ファイルを終了するだけでアクセスを停止したい。

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230

89230がIIS Expressポートであると想定

無料プランでも複数のポートを実行できます


1
私が解決策を得るまで、私はそのような多くの応答を読まなければならないだろうと誰が思うでしょう...
alexkovelsky

3

Win 8.1および外部リクエストでIIS Expressを使用するときにいくつかの問題があります。

次の手順に従って、外部リクエストをデバッグします。

  1. IISをインストールする
  2. ローカルIIS(Webプロジェクトのページプロパティ)を使用するようにVisual Studioを構成する
  3. アプリケーションで動作するようにIISで排他的なAppPoolを作成する
  4. 私のプロジェクトでは、Oracleクライアントを使用しており、32ビットである必要があります(64ビットはVisual Studioでは機能しません)。その後、アプリケーションプールで32ビットを許可する必要があります。
  5. ポート80での要求を許可するようにWindowsファイアウォールを構成します(受信規則)

うまくいきました!


2

管理者からVisual Studioを実行する場合は、

<binding protocol="http" bindingInformation="*:8080:*" />

または

<binding protocol="https" bindingInformation="*:8443:*" />

%userprofile%\My Documents\IISExpress\config\applicationhost.config

1
この構成を$(SolutionDir).vs\config\applicationHost.config適用したほか、Windowsファイアウォールでアプリケーションのポート(8443)を開く必要がありました。
Tonatio 2018年

2

ローカルIISを有効にしたので、デバッグポートに書き換えルールを作成しました...開発が完了したら削除する方が簡単なので、これは他の方法よりも優れており、クールだと思います...書き換えの様子を次に示します。 。

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="^dev/(.*)" />
            <action type="Rewrite" url="http://localhost:47039/{R:1}" />
        </rule>
    </rules>
</rewrite>

VSでは、ローカルIISを直接使用して開発することもできます(これにより、リモート接続が可能になります)が、常に管理者として実行する必要があります...私はそれが好きではありません。


これも私のお気に入りのソリューションです。おかげで:)まずIISのリバースプロキシを有効にしてから、このルールをweb.configに追加する必要がありました。
Mahdi Ghiasi 2017年

1

リバースプロキシアプローチを使用してこの問題を解決しました。

Wampサーバーをインストールし、Apache Webサーバーのシンプルなリバースプロキシ機能を使用しました。

Apache Webサーバー(8081)をリッスンする新しいポートを追加しました。次に、そのポートの仮想ホストとしてプロキシ構成を追加しました。

<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>

1

私はこれらすべてのステップを実行しましたが、何の助けにもなりませんでした。そして必要なのは、IIS Express経由でアプリを実行することだけです...

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

それが役に立てば幸い。


0

ローカルネットワーク内の他のユーザーにiis要求を処理できませんでした。(上記に加えて)BT Hubルーターを再起動するだけで済みました。


0

これはめちゃくちゃ素晴らしいですし、かなりのドメイン名のHTTPSもカバーしています:

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

上記のリンクが消えてしまった場合に備えて、SOの他の場所で見つけることができなかった本当に素晴らしい部品:

> C:\Program Files (x86)\IIS Express>IisExpressAdminCmd.exe Usage:
> iisexpressadmincmd.exe <command> <parameters> Supported commands:
>       setupFriendlyHostnameUrl -url:<url>
>       deleteFriendlyHostnameUrl -url:<url>
>       setupUrl -url:<url>
>       deleteUrl -url:<url>
>       setupSslUrl -url:<url> -CertHash:<value>
>       setupSslUrl -url:<url> -UseSelfSigned
>       deleteSslUrl -url:<url>
> 
> Examples: 1) Configure "http.sys" and "hosts" file for friendly
> hostname "contoso": iisexpressadmincmd setupFriendlyHostnameUrl
> -url:http://contoso:80/ 2) Remove "http.sys" configuration and "hosts" file entry for the friendly  hostname "contoso": iisexpressadmincmd
> deleteFriendlyHostnameUrl -url:http://contoso:80/

上記のユーティリティがSSL証明書を登録します!-UseSelfSignedオプションを使用すると、非常に簡単です。

難しい方法で物事をやりたいのであれば、明白ではない部分は、次のように、使用する証明書をHTTP.SYSに指示する必要があることです。

netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE

Certhashは、MMCの証明書プロパティから取得できる「拇印」です。


0

私は次のようにして接続することができました:

1)IISエクスプレス構成バインディングをローカルホストから「*」に変更

binding protocol = "http" bindingInformation = "*:8888:*"

2)プロトコルタイプに特定のポートを許可するためにファイアウォールで定義されたインバウンドルール:tcp

3)次のコマンドを追加して、ポートのネットワーク構成を追加します。netsh http add urlacl url = http:// *:8888 / user = everyone


質問されてから6年後にこの質問に来て、すでに他に12の回答があるので、回答を編集して他の12よりもどのように機能するかを説明するのが最善です(または少なくともどのように異なります)。
異端者猿、

0

外部要求にアクセスするもう1つの方法は、IIS ExpressではなくIISを使用することです。私のビジュアルスタジオでは、簡単に切り替えることができます。

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


VS2019を使用しています。
PJ3

-1

[プロジェクトプロパティダイアログ]

VisualStudio 2017とNetCore APIプロジェクトを使用した開発の場合:

1)Cmd-Box:ipconfig / allでIPアドレスを決定します

2a)取得したIPアドレスを[プロジェクトのプロパティ]-> [デバッグ]タブに入力します

2b)ポートを選択し、ステップ2aのIPアドレスに接続します。

3)ファイアウォールに許可ルールを追加して、選択したポートでの着信TCPトラフィックを許可します(私のファイアウォールは「ファイアウォールへのルールのブロックまたは追加」でトリガーされます)。その場合は、ウィルを追加してください。

上記のソリューションの欠点:

1)動的IPアドレスを使用する場合は、別のIPアドレスが割り当てられている場合に備えて、上記の手順をやり直す必要があります。

2)あなたのサーバーには、忘れているかもしれない開いたポートがありますが、この開いたポートは、不要なゲストへの招待状のままです。

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