HTTP错误500.19 - 内部服务器错误IIS 7.5

chr*_*ne7 1 asp.net iis

我有一个网站的本地副本,我知道它有一个有效的web.config文件,它在生产和VIsual Studio 2013中运行.它运行在.net 4.0版本上.我得到了可怕的"HTTP错误500.19 - 内部服务器错误".错误页面的配置源部分中有奇怪的信息:

配置来源

-1: 0:

任何人以前都看过这个,并有任何想法如何解决它?应用程序池设置正确,我检查了该文件夹的权限,并添加了具有完整权限的Everyone.

谢谢!

Kev*_*ann 5

这个错误有很多来源 - 我似乎已经触及了大部分:((

这适用于Win Server 2008 R2 64位SP1和IIS 7.5.

Web应用程序和分配的应用程序池之间的.NET版本不同

通常,Web应用程序.NET版本在Web.config文件中指定

...
<system.web>
  <httpRuntime targetFramework="4.5" />
  <compilation targetFramework="4.5.2" />
...
Run Code Online (Sandbox Code Playgroud)

分配给此应用程序的应用程序池的.NET版本必须兼容

获取分配给Web应用程序的应用程序池

IIS Manager > [web-app] > Basic Settings > Application Pool
Run Code Online (Sandbox Code Playgroud)

设置应用程序池的.NET版本

IIS Manager > Application Pools > [app-pool-name] > Basic Settings > .NET Framework Version
Run Code Online (Sandbox Code Playgroud)

通常,.NET 2.0.50727和.NET 4.0.30319只有两种选择

我们安装了.NET 4.6.1 - (4.6.01055),但在IIS中,只显示了上述版本.

Web-App物理路径设置为映射文件夹

与web-app关联的物理路径必须是UNC路径 - 而不是映射路径.

IIS Manager > [web-app] > Basic Settings > Physical Path
Run Code Online (Sandbox Code Playgroud)

这工作:

\\[server-name]\share
Run Code Online (Sandbox Code Playgroud)

这失败了:

M:\share
Run Code Online (Sandbox Code Playgroud)

原因是映射的网络驱动器仅存在于会话中,而不是IIS正在运行的会话中.

Web-App物理路径访问权限

应用程序池中设置的用户帐户必须具有足够的访问权限才能访问Web应用程序物理路径.

必须为此用户帐户授予这些权限(具有子文件夹的继承权限):

  • 修改
  • 阅读并执行
  • 列出文件夹内容

IIS 7.5具有内置虚拟帐户"ApplicationPoolIdentity",可用于所有应用程序池.当此内置帐户与应用程序池关联时,IIS会为该应用程序池创建一个新的唯一用户帐户.

如果使用此默认帐户机制,则必须使用以下格式通过Windows资源管理器为IIS服务器上的关联帐户授予权限:

IIS AppPool\<app-pool-name>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,必须在"位置..."中选择IIS服务器(应用程序池所在的位置),并使用上述格式的应用程序池名称(不区分大小写).单击"检查名称"后,将解析唯一的应用程序池帐户,然后可以为其分配正确的权限.

由于每个应用程序池都必须具有唯一名称,因此关联的帐户也是唯一的.

而不是使用IIS内置帐户,另一种选择是在专用服务帐户下运行应用程序池.使用服务帐户意味着密码不会过期(除其他外).必须在根文件夹上为服务帐户授予上述权限.

也可以使用普通用户帐户,但由于密码过期而不建议这样做,因此需要仔细设置相关的访问权限.

应用程序池帐户密码已更改/已过期

对于app-pool用户帐户,如果此密码已更改或已过期,则需要在IIS中显式更新密码

IIS Manager > Application Pools > [app-pool-name] > Advanced Settings > Process Model > Identity
Run Code Online (Sandbox Code Playgroud)

如果您使用IIS内置虚拟帐户"ApplicationPoolIdentity",则不适用 - 创建的帐户没有密码.使用IIS虚拟帐户机制的另一个原因.

未安装URL重写模块

如果Web应用程序使用重写规则,则必须安装URL重写模块

可以在Web.config文件中指定重写规则

...
<rewrite>
  <rules>
    <rule name="Timesheets Index Rewrite" stopProcessing="true">
      <match url="Timesheets/Index" ignoreCase="true" />
      <action type="Redirect" redirectType="Permanent" url="Timesheets/Entries" />
    </rule>
...
Run Code Online (Sandbox Code Playgroud)

ASP.NET未在IIS中注册

根据IIS和.NET 4的安装/更新顺序,可能需要使用IIS重新注册ASP.NET.

要在命令提示符中检查:

cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319

aspnet_regiis -lv
Run Code Online (Sandbox Code Playgroud)

这应该给出类似的东西

...
2.0.50727.0             C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
4.0.30319.0             C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll
4.0.30319.0             C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
Run Code Online (Sandbox Code Playgroud)

这里,.NET 2注册了64位应用程序,.NET 4注册了32位和64位应用程序.

如果您的目标框架&32/64位配置不在列表中:

aspnet_regiis -i
Run Code Online (Sandbox Code Playgroud)