我有一个网站的本地副本,我知道它有一个有效的web.config文件,它在生产和VIsual Studio 2013中运行.它运行在.net 4.0版本上.我得到了可怕的"HTTP错误500.19 - 内部服务器错误".错误页面的配置源部分中有奇怪的信息:
配置来源
-1: 0:
任何人以前都看过这个,并有任何想法如何解决它?应用程序池设置正确,我检查了该文件夹的权限,并添加了具有完整权限的Everyone.
谢谢!
这个错误有很多来源 - 我似乎已经触及了大部分:((
这适用于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)
| 归档时间: |
|
| 查看次数: |
8092 次 |
| 最近记录: |