3

在 Windows 2000 服务器 (IIS 5) 上托管 ASP.NET 2.0 Web 应用程序之后。我无法浏览该网站。

浏览器上显示以下错误消息,并添加了三个事件日志条目...

浏览器上的错误消息

服务器应用程序不可用 您尝试在此 Web 服务器上访问的 Web 应用程序当前不可用。请在您的网络浏览器中点击“刷新”按钮以重试您的请求。

事件日志条目

事件类型:错误
事件源:ASP.NET 2.0.50727.0
事件类别:无
事件 ID:1000
日期: 2008 年 10 月 24 日
时间:下午 3:45:26
用户:N/A
计算机:XXXXX
描述:aspnet_wp.exe ( PID: XXXX) 意外停止。

事件类型:错误
事件源:ASP.NET 2.0.50727.0
事件类别:无
事件 ID:1088
日期: 2008 年 10 月 24 日
时间:下午 3:45:26
用户:N/A
计算机:XXXXX
描述:无法执行请求因为无法创建应用程序域。错误:0x80070005 访问被拒绝。

事件类型:警告
事件源:ASP.NET 2.0.50727.0
事件类别:无
事件 ID:1073
日期: 2008 年 10 月 24 日
时间:下午 3:45:26
用户:
不适用计算机:WEBDEV
描述:无法初始化AppDomain:/LM/W3SVC/1/Root/WebApplicationName
异常:System.IO.FileLoadException
消息:无法加载文件或程序集“System.Web,版本=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其之一依赖关系。访问被拒绝。StackTrace:在 System.Reflection.Assembly.nLoad(AssemblyName 文件名,字符串代码库,证据 assemblySecurity,程序集 locationHint,StackCrawlMark 和 stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection)
在 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfoculture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(String assemblyName, String typeName)
at System.AppDomain .CreateInstance(字符串组件名称,字符串类型名称)
在 System.AppDomain.CreateInstance(String assemblyName, String typeName)
在 System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
在 System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters 托管参数)

有任何想法吗...

** 编辑 **

为什么会抛出 System.IO.FileLoadException 来访问 System.Web 程序集?

4

4 回答 4

3

我发现当网站文件夹被复制到服务器时,它继承了父文件夹的安全权限,该文件夹仅对管理员、管理员和系统帐户具有权限。

我添加了

  • IUSER_MACHINENAME(互联网访客帐户)
  • ASPNET(ASP.NET 机器帐户)

使用Read & Execute列出文件夹内容读取权限。

即使问题解决了我仍然有一些问题

从第三个事件日志条目中可以清楚地看出,ApplicationManager 无法创建 System.Web 程序集中的 HostingEnvironment。

由于 System.Web 引发了 FileLoadException,因此 ASP.NET 工作进程似乎无权访问 GAC 文件夹。

为什么访问 System.Web 会抛出 FileLoadException?

于 2008-10-27T09:16:52.620 回答
1

从外观上看,您为 ASP.NET 安装设置了不正确的权限。通常最好的办法是卸载并重新安装 ASP.NET 部分。您可以通过以下方式轻松完成此操作。

  1. 打开命令提示符到 C:\windows\microsoft.net\framework\v2.0.50727
  2. 运行以下命令:aspnet_regiis.exe -u
  3. 运行以下命令:aspnet_regiis.exe -i

这将卸载 ASP.NET 并重新安装,然后应该为该帐户建立适当的权限。

于 2008-10-24T14:10:19.073 回答
0

此错误意味着您的代码引发了导致 IIS 崩溃或强制关闭的异常。导致这种情况的常见异常是 OutOfMemoryException 和 StackOverflowException。

您收到 FileLoadException,但可能存在潜在的 OutOfMemoryException 或类似情况,这实际上是其根本原因。在不知道您要加载的内容以及其中的代码的情况下,不可能说出真正导致您的问题的原因。

不过,为了排除加载组件的问题,我要做的第一件事是尝试在测试工具中对其进行反思,看看是否会发生同样的问题。如果是这样,那么问题在于您尝试加载的 DLL,而不是 IIS。

于 2008-10-24T14:10:45.250 回答
0

我遇到了同样的问题,它并没有与带有 -u 和 -i 的 aspnet_regiis 以及许多其他人建议的问题一起消失。但是在我清理“%windir%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”文件夹并从 web.config 中的身份模拟部分向用户授予该文件夹读写权限后,问题就消失了。授予本地 ASPNET 用户这些权限是不够的。

于 2009-10-29T21:40:51.640 回答