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

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

  • Windows 10 专业版
  • 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”作为绑定(bind)的新网站:

    enter image description here

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

    enter image description here

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

    enter image description here

    我点击了 , 如果您点击 该操作将被取消并且您未保存 Web 应用程序属性。您必须点击在 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 所做的更改:

    我们在绑定(bind)到本地主机的网站上没有虚拟目录:

    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 详细信息和 PassThrough:

    enter image description here

    我向 Global.asax 添加了“捕获所有”异常处理,没有断点命中 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”添加到物理文件夹 Security。

    我将 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

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

    最佳答案

    TL;博士

    在阅读其余答案之前,它是 可能你只需要运行 aspnet_regiis 您可以从 cmd 或通过 Web 平台安装程序中的一个很酷的工具来完成,如果您搜索“ASP.NET”,则可以安装一个方便的“执行 ASP.NET IIS 注册工具”。

    原答案:

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

    当您第一次安装 IIS 时,您有一个默认网站,浏览它并确保它有效。对新机器来说是一个很好的开始。但是我在安装 IIS 后刚刚删除了那个 IIS 站点

    我采取的修复步骤:

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

  • enter image description here

    关于c# - 无法从 IIS(内部服务器 500)使用 Visual Studio 2015 运行简单的 ASP.NET MVC 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369907/

    相关文章:

    c# - 客户端 HttpWebRequest : ArgumentNullException s

    c# - '已加载角色名为 X 的 RelatedEnd

    asp.net - IIS 应用程序 - 一些 Urls 应该需要客户端 ssl 证书,而其他的则不需要

    jquery - 在 jquery ajax 插入中使用 HTML.DisplayFor

    c# - 将 Azure 网站本地化为特定文化

    c# - 从列表 C# 中查找不同的元素

    c# - 与 nim 互操作返回包含 string/char* 成员的结构数组

    c# - 将 gridview 导出到 Excel 时无法识别阿拉伯字符

    c# - 在 Sitecore 中识别页面请求的简单方法

    c# - 使用 MVC 托管时无法通过 AJAX 调用 WebAPI Controller