318

従来、ローカルホスト開発サーバーではカスタムドメインを使用していました。次のようなもの:

dev.example.com
dev.api.example.com

これにより、Facebookなどの外部APIを操作する際の柔軟性が大幅に向上しました。これは、過去に組み込みのVisual Studio Development Serverでうまく機能しました。これは、を指すDNSレコードにCNAMEを追加するだけでよいため127.0.0.1です。

ただし、これをIISExpressで機能させることはできませんでした。私が試したすべてが失敗したようです。IIS Expressのファイルに正しいXML構成を追加しましたapplicationHost.configが、IISの実際のインストールほど有効なエントリを認識していないようです。

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

この行を入力してリクエストしようとするとhttp://dev.example.com:1288、次のメッセージが表示されます。

不正なリクエスト-無効なホスト名

私が何か明らかなものを見逃しているかどうか誰かが知っていますか?それとも、IIS Expressチームは、このタイプの使用法を理解するための先見性を本当に欠いていましたか?

4

15 に答える 15

380

これは私のために働いたものです(VS 2013用に更新されました。2010年の改訂履歴を参照してください。VS2015についてはこれを参照してください:https ://stackoverflow.com/a/32744234/218971 ):

  1. PropertiesWebアプリケーションプロジェクト▶▶を右クリックし、セクションを次のようWebに構成します。Servers

    • 選択するIIS Express ▼</kbd> from the drop down
    • プロジェクトURL:http://localhost
    • アプリケーションのルートURLを上書きします。http://dev.example.com
    • クリックしCreate Virtual Directoryます(ここでエラーが発生した場合は、IIS 5/6/7/8を無効にしたり、IISDefault Siteをポート以外に変更したり、 Skypeがポート80を使用していない:80ことを確認したりする必要があります)。
  2. オプション:をに設定Start URLしますhttp://dev.example.com

  3. %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config(Windows XP、Vista、および7)を開き、構成ブロックのサイト定義を次のように編集します<sites>

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. MVCを実行している場合:がapplicationPool「統合」オプションの1つ(「Clr2IntegratedAppPool」など)に設定されていることを確認します。

  5. hostsファイルを開き、行を追加します127.0.0.1 dev.example.com

  6. ► Startあなたの申請!

コメントからのいくつかの素晴らしいアドバイス:

  • 管理者としてVisualStudioを実行する必要がある場合があります。
  • 他の開発者にIISの実行を確認させたい場合netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • サイトをすべてのホストに対して解決する場合は、を設定し bindingInformation="*:80:"ます。好きなポートを使用してください。80が便利です。すべてのホストを解決するには、管理者としてVisualStudioを実行する必要があります
于 2011-03-03T21:18:54.137 に答える
164

Visual Studio 2015の場合、上記の回答の手順が適用されますが、applicationhost.configファイルは新しい場所にあります。「ソリューション」フォルダでパスをたどります。アップグレードapplicationhost.configして、マシンに2つのバージョンがある場合、これは混乱を招きます。

\.vs\config

そのフォルダー内に、applicationhost.configファイルが表示されます。

または、ソリューションフォルダーで.configファイルを検索し、その方法で見つけることもできます。

私は個人的に次の構成を使用しました。

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

私のhostsファイルには次のものがあります。

127.0.0.1       jam.net
127.0.0.1       www.jam.net

そして、私のapplicationhost.configファイルには次のようなものがあります。

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

Visual Studio 2015のインスタンスを管理者として実行することを忘れないでください!あなたがこれを毎回やりたくないのなら、私はこれをお勧めします:

VisualStudioをデフォルトで管理者として実行する方法

これが誰かに役立つことを願っています。VisualStudio2015にアップグレードしようとしたときに問題が発生し、構成が引き継がれていないことに気付きました。

于 2015-09-23T15:56:10.363 に答える
45

Visual Studio2012をIISExpressで使用する場合、既存のバインディングの変更は永続的に機能しません。(VSを閉じるまでは機能するかもしれませんが、その後は本当に混乱します。)

重要なのは、既存のローカルホストバインディングを保持し、その後に新しいバインディングを追加することです。

管理者として実行している場合を除き、実行する必要もありますnetsh add urlacl(ローカルホスト以外のサイトを標準ユーザーとして実行するためのアクセス許可を自分に与えるため)。

任意のホスト名を許可する場合、完全なプロセスは次のとおりです。

  1. Webアプリケーションを作成し、それが使用しているポートを確認します(プロジェクトのプロパティ、[Web]タブ、[プロジェクトのURL]を参照)。
  2. 管理者プロンプトから、次のコマンドを実行します(portnumberを#1で計算したポート番号に置き換えます)。

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

セキュリティを強化するために、全員の代わりにユーザー名(DOMAIN \ USER)を使用することもできます。

  1. applicationhost.config(通常はMy Documents \ IIS Express \ configの下)を開き、ポート番号を持つ要素を見つけます。
  2. 必要なホスト名(この場合は*)でバインディングをもう1つ追加します。例えば:

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    

すべてのホスト名(*)を開きたい場合は、2つのnetshコマンド(*用とlocalhost用)が必要になることに注意してください。特定のホスト名のみを開きたい場合は、2番目のnetshコマンド(localhost)は厳密には必要ありません。特定のホスト名を持つものだけで十分です。

于 2013-02-19T21:19:59.293 に答える
24

無効なホスト名は、IIS Express構成ファイルで構成した実際のサイトが(ほとんどの場合)実行されていないことを示します。IIS Expressには、IISのようなプロセスモデルはありません。


サイトを実行するには、明示的に開始する必要があります(webmatrixを開いてアクセスするか、コマンドラインから(インストールディレクトリから)iisexpress.exeを/siteパラメーターで呼び出します。


一般に、完全修飾DNS名をローカルアクセスに使用できるようにする手順は次のとおりです。DNS名の例を使用してみましょうdev.example.com

  1. %windows%\ system32 \ drivers \ etc \ hostsファイルを編集して、dev.example.comを127.0.0.1にマップします(管理者権限が必要です)。DNSサーバーを制御している場合(ニックの場合のように)、この手順は必要ないため、DNSエントリで十分です。
  2. プロキシ経由でインターネットにアクセスする場合は、dev.example.comがプロキシに気付かないようにしてください(ブラウザの例外リストに追加する必要があります(IEの場合は[ツール]/[インターネットオプション]/[接続]/[LAN設定]になります)。次に、Proxy Server / Advancedに移動し、dev.example.comを例外リストに追加します。
  3. サイト(例:Site1)のIIS Expressバインディングを構成して、dev.example.comを含めます。バインディングを使用するには、管理者権限が必要です。または、http.sysを使用して1回限りのURL予約を行うこともできます。

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. iisexpress /site:Site1WebMatrixでSite1を起動または開きます

于 2011-01-17T21:21:11.190 に答える
19

私のWebMatrixIISExpressのインストールでは、から"*:80:localhost"への変更は"*:80:custom.hostname"機能しませんでした(「不正なホスト名」、適切なetc \ hostsマッピングを使用しても)が、機能しました。また、ここでの他の回答に必要な追加の手順はありませんでした"*:80:" "*:80:*"それはしないことに注意してください。2番目のアスタリスクは省略してください。

于 2012-07-31T17:06:28.590 に答える
10

上記のJessaFlintのように、変更をソース管理に保持したかったので、.vs \ config\applicationhost.configを手動で編集したくありませんでした。また、別のバッチファイルは必要ありませんでした。VS2015を使用しています。

[プロジェクトのプロパティ]→[ビルドイベント]→[ビルド前のイベント]コマンドライン: プロジェクトプロパティのスクリーンショット


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

ポート番号を目的のポートに変更してください。

于 2016-08-05T16:17:33.083 に答える
9

パブリックIPアドレスをワークフローに統合しようとしましたが、これらの回答は役に立ちませんでした(IDEをIDEとして使用するのが好きです)。しかし、上記は私を解決策に導きました(これをVisual Studio 2012 / Windows 8と統合するために壁に頭をぶつけて約2時間後)これが私のために働いた結果です。

VisualStudioによって生成されたapplicationhost.configC:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • IISExpressをAdministrator(ローカルホストではなく)外部アドレスにバインドできるように実行するように設定します
  • Visual Stuioをとして実行Administratorして、管理者としてプロセスを開始し、バインディングを実行できるようにします。

最終的な結果として192.168.2.102、私の場合は参照してテストできます(たとえば、Androidエミュレーターで。これは間違いなく私にとって苛立たしいプロセスだったので、これが他の誰かに役立つことを願っています。

どうやらそれは私が無効にしたいと思っているセキュリティ機能です。

于 2013-01-22T21:54:55.130 に答える
6

賛成の答えは有効です..そしてこの情報は私をかなり助けてくれました。私はこのトピックが以前に議論されたことを知っていますが、私はいくつかの追加の入力を追加したいと思いました。ユーザーIISExpress/Configディレクトリのapplication.configファイルを「手動で編集」する必要があると言われています。ソース管理を介して構成をさまざまな開発者に配布したかったので、これは私にとって大きな問題でした。

私が見つけたのは、「C:\ ProgramFiles \ IISExpress\appcmd.exe」プログラムを使用してこのファイルの更新を自動化できることです。制御パラメータを見つけるのに少し時間がかかりましたが、ここで私の発見を共有します。基本的に、NETSHコマンドとAPPCMD.EXEの両方を実行する.batファイルを作成して(必要に応じてホストファイルをスワップアウトして)、IISExpressでホストヘッダーを簡単に構成できます。

インストールbatファイルは次のようになります。

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

また、これらのバインディングをクリーンアップする「アンインストール」batファイルを作成します。(ホスト名に依存するコードで作業できるように、DNSを偽造することがよくあるため)

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

この情報が誰かに役立つことを願っています。発見するのに少し時間がかかりました。

于 2015-01-01T11:15:20.890 に答える
4

Jaroのアドバイスに従って、WindowsXPおよびIISExpress(Web Matrix経由でインストール)でこれを少し変更するだけで機能させることができ、ローカルホストだけに限定されませんでした。バインディングを正しく設定するだけです。

  1. WebMatrixを使用して、Webアプリケーションルートのフォルダーから新しいサイトを作成します。
  2. WebMatrixを閉じます。
  3. %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP。Vistaと7のパスは似ています)を開き、 <sites>configブロックのサイト定義を次のように編集します。

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

MVCを実行している場合は、applicationPoolを「統合」オプションの1つに設定したままにします。

于 2011-02-18T18:37:13.227 に答える
4

このメソッドは、ASP.NETCore3.1およびVisualStudio2019でテストされ、機能しました。

.vs \ PROJECTNAME \ config \ applicationhost.config

「*:44320:localhost」を「*:44320:*」に変更します。

<bindings>
    <binding protocol="http" bindingInformation="*:5737:localhost" />
    <binding protocol="https" bindingInformation="*:44320:*" />
</bindings>

両方のリンクが機能します。

アプリをカスタムドメインで動作させる場合は、ホストファイルに次の行を追加するだけです。

C:\ Windows \ System32 \ drivers \ etc \ hosts

127.0.0.1 customdomain

今:

  • https:// customdomain:44320

注:アプリがSSLなしで動作する場合は、protocol="http"の部分を変更してください。

于 2020-08-16T12:50:28.320 に答える
3

デビッドの解決策は良いです。しかし<script>alert(document.domain);</script>、プロジェクトURLは、でオーバーライドされていてもローカルホストであるため、ページ内のはまだ「localhost」を警告していることがわかりましたhttp://dev.example.com。私が遭遇したもう1つの問題は、David Murdochが推奨する80ポート番号を使用してSkypeを無効にした場合でも、ポート80がすでに使用されていることを警告することです。だから私ははるかに簡単な別の解決策を見つけました:

  1. 管理者としてメモ帳を実行し、C:\ Windows \ System32 \ drivers \ etc \ hostsを開き、127.0.0.1 mydomainを追加して、ファイルを保存します。
  2. Visual Studio 2013でWebプロジェクトを開き(注:管理者としても実行する必要があります)、プロジェクト->[プロパティ]->[Web]を右クリックし([IIS Express]オプションの下のプロジェクトURLをhttp://localhost:33333/)、次のように変更します。注:この変更後http://localhost:33333/http://mydomain:333333/ 、[プロジェクトURL]ボックスの右側にある[仮想ディレクトリの作成]ボタンをクリックしたり、VisualStudioの[保存]ボタンをクリックしたりしないでください。成功しません。次の手順3の後で、設定を保存できます。
  3. %USERPROFILE%\ My Documents \ IISExpress \ config \ applicationhost.configを開き、「33333:localhost」を検索してから、「33333:mydomain」に更新してファイルを保存します。
  4. 手順2で説明したように設定を保存します。
  5. Visual StudioでWebページを右クリックし、[ブラウザで表示]をクリックします。これで、ページがの下http://mydomain:333333/に開き<script>alert(document.domain);</script>、ページ内で「mydomain」にアラートが表示されます。

注:上記のポート番号は33333であると想定されています。これは、VisualStudioによって設定されたポート番号に変更する必要があります。

投稿編集:今日、別のドメイン名で試してみたところ、次のエラーが発生しました:IISExpressWebサーバーを起動できません。URLの登録に失敗しました...アクセスが拒否されました。(0x80070005)。Windowsタスクバーの右隅にあるIISExpressアイコンを右クリックしてIISExpressを終了し、Visual Studioを管理者として再起動すると、問題は解決しました。

于 2016-08-31T19:44:24.957 に答える
2

上記のすべてを試しましたが、何も機能しませんでした。この問題を解決したのは、hostsファイルにIPv6バインディングを追加することでした。@David Murdochsの回答のステップ5で、1行ではなく2行を追加します。

127.0.0.1 dev.example.com
::1 dev.example.com

$ ping localhost以前は次のコマンドを返していたコマンドラインから確認して、それを理解しました。

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

代わりに、次のようになります。

Reply from ::1: time<1ms

理由はわかりませんが、何らかの理由でIISExpressはIPv4ではなくIPv6を使用し始めました。

于 2019-11-22T13:53:14.487 に答える
1

誰かが必要とするかもしれない場合に備えて...

私の要件は次のとおりです。

  • SSLが有効
  • カスタムドメイン
  • (デフォルト)ポートで実行中:443

IISExpressでこのURLを設定します。http://my.customdomain.com

これを設定するために、私は次の設定を使用しました:

プロジェクトURL:http://localhost:57400

開始URL:http://my.customdomain.com

/.vs/{solution-name}/config/applicationhost.config設定:

<site ...>
    <application>
        ...
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:57400:" />
        <binding protocol="https" bindingInformation="*:443:my.customdomain.com" />
    </bindings>
</site>
于 2021-02-16T19:54:43.667 に答える
0

これにはiisexpress-proxy(npmから)を使用していました。

https://github.com/icflorescu/iisexpress-proxy

于 2016-02-23T14:50:39.820 に答える
0

誰かが必要とする場合に備えて、これをここに残します...

IIS ExpressでWordpressマルチサイトをセットアップするためのカスタムドメインが必要でしたが、管理者としてWebmatrix /VisualStudioを実行するまで何も機能しませんでした。その後、サブドメインを同じアプリケーションにバインドすることができました。

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

次に、http://whatever.localhost:12345/に移動すると実行されます。

于 2017-06-13T22:27:34.570 に答える