在VS2010中使用带有IIS Express的端口80

问题描述 投票:31回答:5

我有一个应用程序,我试图在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,它似乎被运行在进程ID 4上的System使用,这是NT内核和系统进程。我不知道这是否会阻止我使用该端口。我想也许这是因为http.sys持有该端口所以没有别的可以使用它?

我通过修改C:\Users\[MyUser]\Documents\IISExpress\config\applicationhost.config文件的默认绑定设法让IIS Express在端口80上运行,虽然我可以通过这种方式手动启动IIS Express,然后VS会因为该端口上已存在绑定而收到错误。所以我把它改回8080,使用VS2010中的按钮创建虚拟目录(我猜这与输入网站绑定相同)但是当我去调试应用程序时仍然会出错。在VS2010中是否有硬编码的东西不允许它在端口80上启动IIS Express?

更新和修复:好的,所以我发现了一些要检查的东西,我确实解决了我的问题,但并不完全。一篇文章建议确保我没有安装SQL报告服务,因为它可以在端口80上监视,我曾经安装它但不再安装它并不是我遇到的问题。但我确实意识到我安装了WebDeploy。它与Web Platform Installer的VS2010 SP1捆绑在一起。这很好,因为我想要WebDeploy的客户端工具,但它也在我的系统上安装了代理,该代理正在端口80上进行监控。我去了我的服务列表并停止了Web Deploy Agent Service。在我这样做的时候,我现在可以在VS2010中使用端口80用于IIS Express。

与在IIS Express中运行端口80相关的新问题然而我的应用程序是一个MVC3应用程序,我遇到了一个问题,因为MVC3根本没有捕获我的请求,所以它没有触发我的控制器动作或类似的东西,但我的应用程序的根目录中的txt文件可以到达所以我知道它是我的网站,IIS Express正在提供。任何人都有任何问题在端口80上的IIS Express中运行MVC3(我不知道它是否独占于MVC3)?

asp.net-mvc visual-studio-2010 http asp.net-mvc-3 iis-express
5个回答
23
投票

只是为这个问题发布我自己的答案,所以我可以将问题标记为已回答。检查http://learn.iis.net/page.aspx/1005/handling-url-binding-failures-in-iis-express/如果已安装Web Deploy Agent服务,请将其禁用。


4
投票

在我的情况下,我通过停止“SQL Server Reporting Services”解决了这个问题

你可以找到它

控制面板 - >服务


3
投票

非常感谢您发现'Web Deploy Agent'服务!这是最近刚刚开启的东西,因为我已经完成了所有这些工作,并且今天安装了IIS Express的更新版本,并遇到了与端口80完全相同的问题。所以现在我已经关闭了Web Deploy代理,我的系统再次正常工作。

至于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.NET MVC3上运行,因此大多数站点仍然是PHP但很多新东西是现在运行ASP.NET MVC3,这些东西适合我。

您的IIS Express是否在Visual Studio之外与MVC3一起正常工作,或者MVC3的东西根本不起作用?


0
投票

我没有安装Web Deploy Agent但遇到了这个问题。您还可以通过运行此命令来确定使用该端口的哪个应用程序或服务,然后在任务管理器中对其进行跟踪来解决此问题。

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

然后打开任务管理器,转到进程,单击“显示所有用户的进程”复选框,然后单击“查看”菜单并转到“列”,添加PID列。

将netstat命令中的进程ID与任务管理器中的PID进行匹配,您将找到使用该端口的服务或应用程序。


0
投票

那个解决方案帮了我

在Windows 7或Windows Vista上,从提升的命令提示符处运行以下命令:console

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

此命令将允许任何用户的应用程序(包括您自己的IIS Express实例)使用端口80运行,而无需管理权限。要限制对自己的访问权限,请将“everyone”替换为您的Windows身份。

取自该来源 - > https://docs.microsoft.com/en-us/iis/extensions/using-iis-express/handling-url-binding-failures-in-iis-express

© www.soinside.com 2019 - 2024. All rights reserved.