【发布时间】:2011-03-08 18:25:27
【问题描述】:
据此MSDN article about medium trust,在中等信任下:
FileIOPermission 受到限制。这 意味着您只能访问 你的应用程序的虚拟目录 等级制度。您的申请获得批准 读取、写入、追加和路径发现 您的应用程序的权限 虚拟目录层次结构。
但是,对于我当前的托管服务提供商在中等信任下运行应用程序,当我尝试在应用程序的根文件夹中读取/写入文件时,我收到 access to path 'myfile.xml' denied 错误。
使用以下代码读取此文件
XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));
更新完整错误:
访问路径 'C:\WebSites\mywebsite\myfile.xml' 是 拒绝。
描述:未处理的异常 在执行过程中发生 当前的网络请求。请查看 堆栈跟踪以获取有关的更多信息 错误及其起源 代码。
异常详情: System.UnauthorizedAccessException: 访问路径 'C:\WebSites\mywebsite\myfile.xml' 是 否认。
ASP.NET 无权访问 请求的资源。考虑 授予对资源的访问权限 到 ASP.NET 请求标识。 ASP.NET 有一个基本进程标识 (通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 和 IIS 7 上的网络服务, 和配置的应用程序池 IIS 7.5 上的标识),如果 该应用程序不是模拟的。 如果应用程序冒充 通过 , 身份将是匿名的 用户(通常是 IUSR_MACHINENAME)或 经过身份验证的请求用户。
要授予 ASP.NET 对文件的访问权限, 在资源管理器中右键单击文件, 选择“属性”并选择 安全选项卡。点击“添加”添加 适当的用户或组。强调 ASP.NET 帐户,然后检查 所需访问权限的框。
来源错误:
产生了一个未处理的异常 在当前执行期间 网络请求。有关的信息 异常的起源和位置 可以使用异常识别 下面的堆栈跟踪。
堆栈跟踪:
[未授权访问异常:访问 到路径 'C:\WebSites\mywebsite\myfile.xml' 是 拒绝。]
System.IO.__Error.WinIOError(Int32 错误代码,字符串可能是FullPath) +12892935 System.IO.FileStream.Init(字符串路径, FileMode 模式,FileAccess 访问, Int32 权限,布尔用户权限, FileShare 共享,Int32 bufferSize, 文件选项选项, SECURITY_ATTRIBUTES secAttrs,字符串 msgPath,布尔值 bFromProxy,布尔值 使用长路径)+2481
System.IO.FileStream..ctor(字符串 路径、FileMode 模式、FileAccess 访问、文件共享共享、Int32 bufferSize,FileOptions 选项, 字符串 msgPath,布尔 bFromProxy) +229 System.IO.FileStream..ctor(字符串 路径、FileMode 模式、FileAccess 访问、文件共享共享)+102
System.Xml.XmlWriterSettings.CreateWriter(字符串 输出文件名) +5224496
System.Xml.Linq.XElement.Save(字符串 文件名,SaveOptions 选项)+108
mesoBoard.Services.SiteConfig.UpdateCache() +1971 mesoBoard.Web.MvcApplication.OnApplicationStarted() +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start() +604[HttpException (0x80004005): 访问 路径 'C:\WebSites\mywebsite\myfile.xml' 是 拒绝。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+3985477 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext 上下文, MethodInfo[] 处理程序)+191
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态,MethodInfo[] 处理程序,IntPtr appContext、HttpContext 上下文)+325 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+407 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375[HttpException (0x80004005): 访问 路径 'C:\WebSites\mywebsite\myfile.xml' 是 拒绝。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+11524352
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文)+141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+4782309
【问题讨论】:
-
请显示完整的堆栈跟踪和异常消息。不清楚这是 CAS (CLR) 安全异常还是 NTFS 文件权限问题。
-
@Elion - 更新完全错误。
-
您使用的是什么版本的 IIS?是否有任何其他进程可能会锁定 myfile.xml 文件?
-
IIS 7.5,我在一个共享主机上,除了我的 Web 应用程序之外没有其他进程应该使用它,它可以被多个用户访问,但不能被编辑。
标签: asp.net file-io medium-trust