无法从IIS(内部服务器500)使用Visual Studio 2015运行简单ASP.NET MVC应用程序

时间:2016-02-12 18:41:12

标签: c# asp.net asp.net-mvc visual-studio iis

  • Windows 10 Professional
  • IIS 10
  • Visual Studio 2015(以管理员身份运行)

我想从IIS而不是IIS Express运行,因为我有一个指向我的机器的外部IP,我将从外部源接收消息。最终我将使用WebAPI但是为了测试和设置IIS,我使用的是一个简单的ASP.NET MVC 5 Web应用程序。

我创建了一个新的ASP.NET MVC 5 Web应用程序,这是Visual Studio 2015 MVC模板的框架,然后我使用IIS Express运行应用程序,没有问题:

enter image description here

然后我去了IIS 10并创建了一个以“localhost”作为绑定的新网站:

enter image description here

IIS中这个新网站的物理路径是C:\inetpub\wwwroot\AspNetMvcTest

enter image description here

然后我转到Web应用程序属性并切换到IIS。我被问到是否要创建一个新的虚拟目录:

enter image description here

我点击,如果您点击,该操作将被取消,您未保存的网络应用程序属性。您必须单击才能更改为Visual Studio中的本地IIS属性。

然后我被告知IIS“localhost”被映射到另一个文件夹,我想重新映射:

enter image description here

我点击。如果单击,您将再次更改未保存的Web应用程序属性,并且您将不会在Visual Studio中使用本地IIS。

这是有趣的Visual Studio正在尝试更改“虚拟目录”,因为它将实际更改IIS网站的物理路径而不是添加虚拟目录。虚拟目录是一个文件夹,位于IIS网站的物理路径之外,IIS将视为物理路径文件夹的一部分。但我离题了。

现在我被告知“虚拟目录”已成功创建:

enter image description here

现在我们可以看一下Visual Studio 2015对IIS 10所做的更改:

我们在绑定到localhost的网站上没有虚拟目录:

enter image description here

我的物理路径已被Visual Studio 2015更改,并且映射到我的简单ASP.NET MVC 5 Web应用程序所在的目录:

enter image description here

因此,即使Visual Studio 2015在更改ASP.NET MVC 5 Web应用程序属性时使用“虚拟目录”,Visual Studio 2015也仅关注物理路径,这是它在IIS中唯一更改的内容我能看到。

现在内部服务器错误500详细信息

我在Visual Studio 2015中按F5,F12工具说有内部服务器500错误:

enter image description here

如果我们在Fiddler中检查请求和响应,则500错误的内容长度= 0

enter image description here

为了尝试获取500错误的更多详细信息,我在Web.Config中关闭了自定义错误,并添加了httpErrors Detailed和PassThrough:

enter image description here

我向Global.asax添加了“catch all”异常处理,没有断点enter image description here

这是我的调用堆栈,它是空的,屏幕截图中的断点都没有被击中:

enter image description here

我在我的解决方案中添加了一个控制台应用程序作为“设置为启动项目”,这是我的调用堆栈,证明可以点击一个断点:

enter image description here

以下是事件查看器的屏幕截图 - >应用程序,我清除了应用程序日志,在Visual Studio 2015中按下了F5,刷新了应用程序日志,它仍然是空的:

enter image description here

我认为问题是Visual Studio更改物理路径后的文件夹权限

所以我添加了IIS_IUSRS并提供了完全控制,即使帐户不需要物理路径目录的高级别权限:

enter image description here

我的ApplicationPoolIndentity是Framework v4.0和ApplicationPoolIdentity ApplicationPoolIdentity被分配了Users组和IIS_IUSRS组的成员资格:

enter image description here

我尝试将特定的应用程序池添加到ASP.NET MVC应用程序物理目录的安全属性中,因此首先我发现Visual Studio F5附加到的过程:

enter image description here

我将“DefaultAppPool”和我的IIS应用程序池“IIS APPPOOL \ AspNetMvcTest”添加到物理文件夹安全性。

我将index.html添加到Web应用程序物理文件夹中,但这不起作用:

<html>
<head>
</head>
<body>
<h4 style="color: black">hello world</h4>
</body>
</html>

我已经将IIS网站物理路径移动到inetpub / wwwroot回到我创建网站时创建的目录,我甚至无法浏览到一个简单的HTML文件,我得到同样的空500错误

enter image description here

所以现在我被困住了,不知道还能做什么。

2 个答案:

答案 0 :(得分:7)

<强> TL; DR

在阅读剩下的答案之前,你可能只需要运行aspnet_regiis ,你可以从cmd或通过Web平台安装程序中的酷工具进行操作,如果你在那里搜索“ASP.NET”是一个方便的“执行ASP.NET IIS注册工具”,您可以安装。

原始答案:

感谢所有人的帮助,我应该做的第一件事是退后一步,从IIS网站测试一个index.html“Hello World”测试文件,其中c:\ inetpub \ wwwroot作为物理路径IIS网站。

首次安装IIS时,您有一个默认网站,浏览到它并确保其有效。是一台新机器的良好开端。但我刚刚在安装IIS

后删除了IIS站点

我采取的修复步骤:

  1. 我通过控制面板卸载了IIS - &gt;程序和功能 - &gt; Windows功能。
  2. 重新启动了我的电脑
  3. 在此document
  4. 之后安装了适用于Windows 10的IIS
  5. 通过创建网站,使用DefaultAppPool然后浏览localhost来测试IIS,这是有效的(当你第一次安装IIS时,你有这个网站但我几天前在我的网站上删除了它)
  6. 我发现我的简单ASP.NET网站仍然无法正常工作,并且已发布到c:\ inetpub \ wwwroot \ AspNetMvcTest,因此它不是潜在的文件夹权限问题。浏览时,而不是加载我的ASP.NET网站IIS重定向到根目录c:\ inetpub \ wwwroot并显示其IIS欢迎页面(“iisstart.htm”)
  7. 这意味着我需要通过Web平台安装程序中的酷工具运行aspnet_regiis,如果你搜索“ASP.NET”,你可以安装一个方便的“执行ASP.NET IIS注册工具”。
  8. 就是这样,我已经完成了设置,ASP.NET MVC网站在刷新浏览器后立即开始使用IIS(位置栏中的localhost)。
  9. enter image description here

答案 1 :(得分:0)

我认为主要的问题是ASP.NET MVC 5 web至少需要.NET Framework 4.5。根据您提供的信息,Web应用程序的应用程序池使用的是.NET 4.0。看起来你还没有在你的IIS中注册ASP.NET 4.5。

要使用IIS注册ASP.NET 4.5,您可以使用Visual Studio的命令提示符(作为管理员),转到以下目录并运行命令 aspnet_regiis.exe -i

C:\Windows\Microsoft.NET\Framework64\v4.5.<version>

使用IIS成功注册ASP.NET 4.5后,将Web应用程序更改为使用.NET 4.5应用程序池。