2013-05-01 63 views
4

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

我尝试添加以下内容到我的web.config中,因为我已经看到它在众多帖子中提到过,但它没有帮助。无论如何,这个解决方案似乎有点像大锤的方法,因为它通过托管管道运行所有请求,但仍然认为我会给它一个镜头。

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

我已验证我可以访问的“robots.txt”文件在我的应用程序根目录,这样服务器被解雇了,并指向正确的地方,但它不会成为我的任何MVC页。

我也试过this SO answer的解决方案。那里也没有骰子。

我也尝试将我的Azure Web角色切换到IIS而不是IIS Express运行。我在那里得到相同的403错误。为了彻底,我运行了aspnet_regiis -ir,即使在我的机器上本地运行的其他MVC应用程序(非Azure)也能正常工作。

编辑 所以这是有趣的...当我按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.

任何想法?

+0

我记得在VS网站夫妇问题:a)检查防火墙和防病毒软件不会阻止某些端口(只是尝试禁用它们)b )在项目设置中转到Web设置,关闭动态端口并检查固定端口(并设置82)。 – outcoldman 2013-05-10 04:21:38

+0

Azure不使用标准VS MVC项目中的Web设置。它将计算实例加载到Azure开发结构中,以便MVC项目的Web设置不会产生任何影响。我没有问题到端口81/82,我只是得到403错误,一旦他们加载。 – Scott 2013-05-10 04:36:55

+0

有没有机会在您的本地iis上运行81端口的任何网站? – JamesKn 2013-05-10 07:49:15

回答

1

我无法得到确切的问题,但我可以尝试解释您的网站为什么会这样做(我们的项目中的行为非常类似)。我不确定这是对此行为100%正确的解释,但我ha AFAIK: 1.您的IIS和IIS Express不能同时使用相同的端口。 2.运行它自己的堆栈的Azure计算仿真器\负载均衡代理(模拟多实例天青环境)并需要在某个端口注册自己。

为什么发生这种情况: 您可能在您的IIS中有一些使用端口80的其他站点。因此,当Emulator启动时 - 它会发现端口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. 

所以仿真器注册的公共端口81上他的负载平衡端点\ 444和暴露的某种内在的端点上82 \ 446。 但我怀疑'127.0.0.1'和'localhost'的行为有点不同(我知道它是一样的东西,只是怀疑IP网址会通过一个不同的管道,但我无法证实我的猜测)和,特别是如果你在一个角色中有多个站点 - 127.0.0。1将无法击中正确的端点(可能导致它不包含正确的主机头?)。

这导致localhost:444(在我们的例子中)正常工作而127.0.0.1:444不工作的情况。

This answer also could lead you to some options how to fix\deal with that.

希望它会帮助你有点

相关问题