web-dev-qa-db-ja.com

IIS Express with VS2010内部でポート80を使用する

VS2010のIIS Expressの下にある開発システムで実行しようとしているアプリがありますが、ポート80を使用する必要がありますが、機能しません。予約されているポート80に関する情報を調べました。 http://learn.iis.net/page.aspx/1005/handling-url-binding-failures-in-iis-express/

しかし、それを行った後でも、vs2010から「IIS Express Webサーバーを起動できません。ポート '80'が使用中です」というエラーが表示されます。

他に何を試したらいいのかわかりません。 Process Hackerを使用してポート80を追跡しましたが、NTカーネルお​​よびシステムプロセスであるプロセスID 4で実行されているSystemによって使用されているようです。それでもポートを使用できなくなるかどうかはわかりません。おそらく、それはhttp.sysがそのポートを保持しているため、他に何も使用できないためだと思いましたか?

IIS ExpressをC:\Users\[MyUser]\Documents\IISExpress\config\applicationhost.configファイルのデフォルトバインディングを変更することでポート80で実行できましたが、IIS Expressを手動で開始できますが、VSそのポートにバインディングがすでに存在するため、エラーが発生します。だから私はそれを8080に戻し、VS2010内のボタンを使用して仮想ディレクトリを作成します(これはサイトバインディングの入力と同じだと思います)が、アプリケーションをデバッグするときにエラーが発生します。ポート80でIIS Expressを開始できないVS2010にハードコーディングされたものはありますか?

更新と修正:わかりました。確認することがいくつかあり、問題を完全に解決することはできませんでした。 1つの投稿は、SQLレポートサービスがポート80で監視できるため、インストールされていないことを確認することを提案しました。以前はインストールされていましたが、もうインストールされておらず、発生していた問題ではありませんでした。しかし、WebDeployがインストールされていることに気付きました。 Web Platform Installer からVS2010 SP1バンドルにバンドルされていました。これは、WebDeployのクライアントツールが必要なので問題ありませんが、ポート80で監視しているシステムにエージェントをインストールしました。サービスのリストに移動し、Web Deploy Agent Serviceを停止しました。これを実行するとすぐに、VS2010内からIIS Expressにポート80を使用できるようになります。

IIS Expressのポート80での実行に関連する新しい問題ただし、私のアプリケーションはMVC3アプリであり、 MVC3が私の要求をまったくキャプチャしていないため問題が発生しているため、コントローラーのアクションなどを起動していませんが、アプリのルートにあるtxtファイルにアクセスできるため、自分のサイトであることがわかりますIIS Expressが稼働しています。ポート80のIIS ExpressでMVC3(MVC3専用かどうかわからない)の実行に問題がありますか?

31
Nick Albrecht

この問題に対する自分の回答を投稿するだけで、質問に回答済みのマークを付けることができます。チェック http://learn.iis.net/page.aspx/1005/handling-url-binding-failures-in-iis-express/ Web配置エージェントサービスがインストールされている場合は無効にします。

23
Nick Albrecht

私の場合、「SQL Server Reporting Services」を停止して問題を解決しました

あなたはそれを見つけることができます

コントロールパネル->サービス

4
Nour Sammour

「Web配置エージェント」サービスをご利用いただきありがとうございます。これは最近完全に機能していて最近オンになったもので、今日IIS Expressの更新バージョンをインストールしましたが、ポート80でまったく同じ問題が発生しました。 Web配置エージェントをオフにしましたが、システムは再び正常に動作します。

ASP.NET MVC3に関しては、ポート80とポート443でうまく動作します。IIS Expressがこれらを使用できるように、両方のポートをバインドするのはかなりの作業でした。通常のユーザー(上記のリンクからのほとんど)と、使用するSSL証明書をインストールします。これを機能させるために、applicationhost.configファイルにすべてのエントリを手動で作成しました。適切なサイトセクションは以下のとおりです。

    <sites>
        <site name="PHP: A Main" id="2144116512">
            <application path="/">
                <virtualDirectory path="/" physicalPath="C:\var\www\amain\www" />
                <virtualDirectory path="/images" physicalPath="C:\var\www\images" />
            </application>
            <application path="/admin">
                <virtualDirectory path="/" physicalPath="C:\var\www\amain\www\admin" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:80:test.amainhobbies.com" />
                <binding protocol="https" bindingInformation="*:443:test.amainhobbies.com" />
            </bindings>
        </site>
        <siteDefaults>
            <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
            <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
        </siteDefaults>
        <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
        <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

私のサイトは、PHPとASP.NET MVC3サイトを組み合わせたものであることに注意してください。ASP.NETMVC3で実行するためにすべてを書き直している最中なので、ほとんどのサイトまだPHPですが、ASP.NET MVC3を実行している新しいものの多くがあり、それらは私にとってはうまくいきます。

IIS ExpressはVisual Studioの外部のMVC3で適切に動作しますか、それともMVC3のものがまったく動作していませんか?

3
Kendall Bennett

その解決策は私を助けました。

Windows 7またはWindows Vistaでは、管理者特権のコマンドプロンプトから次のコマンドを実行します。

netsh http add urlacl url=http://localhost:80/ user=everyone

このコマンドを使用すると、ユーザーのアプリケーション(独自のIIS Expressインスタンス)を含む)が管理者権限を必要とせずにポート80を使用して実行できるようになります。このアクセスを自分だけに制限するには、「everyone」をWindows IDに置き換えます。

そのソースから取得-> https://docs.Microsoft.com/en-us/iis/extensions/using-iis-express/handling-url-binding-failures-in-iis-express

Web配置エージェントをインストールしていませんでしたが、この問題が発生しました。このコマンドを実行してポートを使用しているアプリケーションまたはサービスを特定し、タスクマネージャーで追跡することで、これを修正することもできます。

netstat -o -n -a | findstr 0.0:80

次に、タスクマネージャーを開き、[プロセス]に移動し、[すべてのユーザーのプロセスを表示する]チェックボックスをオンにしてから、[表示]メニューをクリックして[列]に移動し、PID列を追加します。

NetstatコマンドのプロセスIDをタスクマネージャーのPIDに一致させると、ポートを使用しているサービスまたはアプリケーションが見つかります。

0
Bikey