C# 非法入境者及非法入境者;IIS Express在本地为MVC4 Azure应用程序引发403个错误

C# 非法入境者及非法入境者;IIS Express在本地为MVC4 Azure应用程序引发403个错误,c#,asp.net-mvc,azure,C#,Asp.net Mvc,Azure,我有一个C#MVC4应用程序,我最近将其迁移到Azure web角色。我可以在Azure平台上发布/运行该站点,但当我尝试使用Azure开发结构在本地运行它时,IIS和IIS Express会抛出一个常见的403错误 我尝试将以下内容添加到我的web.config中,正如我在许多帖子中看到的那样,但没有起到任何作用。不管怎么说,这个解决方案似乎有点像一个大锤式的方法,因为它通过托管管道运行所有请求,但我还是想试试 <system.webServer> <module

我有一个C#MVC4应用程序,我最近将其迁移到Azure web角色。我可以在Azure平台上发布/运行该站点,但当我尝试使用Azure开发结构在本地运行它时,IIS和IIS Express会抛出一个常见的403错误

我尝试将以下内容添加到我的web.config中,正如我在许多帖子中看到的那样,但没有起到任何作用。不管怎么说,这个解决方案似乎有点像一个大锤式的方法,因为它通过托管管道运行所有请求,但我还是想试试

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"></modules>
    <handlers>
      <remove name="UrlRoutingHandler"/>
    </handlers>
  </system.webServer>

我已经验证了我可以访问我的应用程序根目录中的“robots.txt”文件,以便启动服务器并指向正确的位置,但它不会服务于我的任何MVC页面

我也试过了这个解决方案。那里也没有骰子

我还尝试将我的Azure web角色切换为在IIS中运行,而不是在IIS Express中运行。我得到了相同的403错误。为了彻底了解,我确实运行了aspnet_regiis-ir,尽管在我的机器上运行的其他本地(非Azure)MVC应用程序运行得很好

编辑 所以这很有趣…当我点击F5(我的Azure项目是我的启动项目)时,Azure计算/存储模拟器启动,然后我的浏览器打开到
http://127.0.0.1:81/
。这是我得到403错误的URL

但是,如果我使用的是IIS(不是Express),并且我转到Azure在部署期间创建的IIS中的网站,右键单击“管理网站”,然后选择“浏览”,它会在
http://localhost:82/
。注意“localhost”而不是127.0.0.1,端口是82而不是81,并且它可以工作如果我现在尝试
http://127.0.0.1:82
(使用IP,但端口为82)我仍然得到403


有什么想法吗?

我无法理解您提出的确切问题,但我可以尝试解释一下为什么您的网站会有这种行为(我们的项目中有非常类似的行为)。我不确定这是100%正确的解释这种行为,但我 阿法克: 1.您的IIS和IIS Express不能同时使用同一端口。 2.Azure Compute Emulator运行自己的堆栈\负载平衡代理(用于模拟多实例Azure环境),并且需要在某些端口上注册自身

那么为什么会发生这种事情: 您的IIS中可能还有其他一些使用端口80的站点。因此,当模拟器启动时,它会发现端口80无法使用(因为它被工作的iis锁定)。它开始端口漫游,直到找到下一个要绑定的自由端口(对我们来说,将是81和444)。您可以在启动F5后检查常规输出窗口,您可以在那里找到类似的消息:

Windows Azure Tools: Warning: Remapping public port 80 to 81 to avoid conflict during emulation.
Windows Azure Tools: Warning: Remapping public port 443 to 444 to avoid conflict during emulation.
Windows Azure Tools: Warning: Remapping private port 80 to 82 in role 'MvcApplication' to avoid conflict during emulation.
Windows Azure Tools: Warning: Remapping private port 443 to 446 in role 'MvcApplication' to avoid conflict during emulation.
所以emulator在公共端口81\444上注册了他的负载平衡端点,并在82\446上公开了某种内部端点。 但我怀疑“127.0.0.1”和“localhost”的行为有点不同(我知道这是同一件事,只是怀疑IP url将通过一个稍微不同的管道,但我不能证实我的猜测),特别是如果您在一个角色中有多个站点,那么127.0.0.1将无法命中正确的端点(可能是因为它没有包含正确的主机头?)

这会导致localhost:444(在本例中)正常工作,而127.0.0.1:444不能正常工作的情况


希望它能帮你一点忙

我记得VS中的网站有两个问题:a)检查防火墙和抗病毒药物没有阻止某些端口(只需尝试禁用它们)b)在项目设置中转到web设置,关闭动态端口并检查固定端口(并设置82)。Azure在标准VS MVC项目中不使用web设置。它在Azure开发结构中加载计算实例,因此MVC项目的web设置不会产生任何影响。我在访问端口81/82时没有问题,只是加载后出现403个错误。您的本地iis中是否有任何网站在端口81上运行?@outcoldman,为web项目设置固定端口对计算仿真器没有影响。对于你们所有人来说,请查看这篇文章,它解释了本地仿真器是如何工作的,以及为什么端口可能不同。唯一可行的建议是检查套接字127.0.0.1:81上是否已经有东西在侦听,而且VS Tooling很可能被愚弄了,并在该端口上启动浏览器,而不是82。