我在运行.NET webapp时遇到了一个我不知道的EventLog错误。
该应用程序基本上从数据库读取,然后从磁盘读取(读取文件大小,然后写回数据库)。
我的应用程序启动并运行,我的工作站(IISExpress)和我们的其他服务器(带有IIS7的Windows 2008)没有任何问题
但是当我在带有IIS6的2003 R2服务器上运行它时,我会遇到一些奇怪的行为。 IIS应用程序启动并报告没有错误,但当我尝试访问该网页时,我得到一个“服务器应用程序不可用”,服务器上的EventLog给我这个转储:
Event Type: Error
Event Source: ASP.NET 4.0.30319.0
Event Category: None
Event ID: 1325
Date: 24.05.2011
Time: 13:29:11
User: N/A
Description:
Failed to initialize the AppDomain:/LM/W3SVC/1309226359/Root
Exception: System.IO.FileLoadException
Message: Could not load file or assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Access is denied.
StackTrace: at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(String assemblyName, String typeName)
at System.AppDomain.CreateInstance(String assemblyName, String typeName)
at System.AppDomain.InternalCreateInstanceWithNoSecurity(String assemblyName, String typeName)
at System.AppDomain.InternalCreateInstanceWithNoSecurity(String assemblyName, String typeName)
at System.Activator.CreateInstance(AppDomain domain, String assemblyName, String typeName)
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
该应用程序继续在IIS中运行。这个IIS还可以容纳一大堆其他站点,没有任何问题。是的,应用程序设置为在.NET 4上运行,服务器也可以托管其他.NET 4应用程序。
据我所知,它无法加载System.Web程序集,但我不确定这是怎么回事......
以下是该应用的web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<globalization culture="nb-NO"/>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<customErrors mode="Off"></customErrors>
<xhtmlConformance mode="Strict"/>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
</configuration>
答案 0 :(得分:2)
这可能是由于Web应用程序文件夹中的文件系统权限不足造成的。
我通过向网络用户和所有孩子提供ASPNET
和Network Service
帐户Read & Execute
和List Folder Contents
权限来解决相同的症状。
答案 1 :(得分:0)
Lachlan Roche的回答对我有用。具体来说,我将对我的Web应用程序文件夹的完全控制权授予LOCAL_MACHINE \ Users和LOCAL_MACHINE \ IIS_IUSRS,其中LOCAL_MACHINE是我本地计算机的域。我没有检查两个组是否都需要完全访问权限,因此您可能不需要同时访问这两个组。
我的系统是带有IIS 7.5.7600.16385和Visual Studio 12的Windows 7企业版