1

我有一个基本的 .NET 4 网站。它包含一个实体框架模型,该模型映射到我存储在App_Data文件夹中的 SQL Server Compact 数据库。

我已经向网站添加了 OData 服务并公开了实体并且一切正常,我可以发布到我的共享主机并读取/写入数据库而不会出现问题。

Application_Start但是,我想在(创建一个小型搜索索引)期间访问我的数据库中的数据。当我在应用程序生命周期的那个时刻创建实体框架上下文的实例时,它会引发一个异常,即它无权访问数据库。它在本地运行良好,只是当我发布到我的共享主机时出现问题。

通常我认为这只是一个直接的权限问题,但 OData 服务工作正常,因此必须使用与在Application_Start...中执行的代码不同的权限执行。

有没有人见过这个或有任何想法可能会发生什么?

System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
  at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
  at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
  at System.Data.SqlServerCe.UnmanagedLibraryHelper..ctor(String fileName)
  at System.Data.SqlServerCe.NativeMethodsHelper..ctor(String modulePath)
  at System.Data.SqlServerCe.NativeMethods.LoadValidLibrary(String modulePath)
  at System.Data.SqlServerCe.NativeMethods.LoadNativeBinariesFromPrivateFolder(String privateInstall)
  at System.Data.SqlServerCe.NativeMethods.LoadNativeBinaries()
  at System.Data.SqlServerCe.SqlCeConnection..ctor()
  at System.Data.SqlServerCe.SqlCeProviderFactory.CreateConnection()
  at System.Data.EntityClient.EntityConnection.GetStoreConnection(DbProviderFactory factory)
  at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
  at System.Data.EntityClient.EntityConnection..ctor(String connectionString)
  at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
  at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
  at LDS.Model1Container..ctor() in *REMOVED*\LDS\Model1.Designer.cs:line 40
  at LDS.Global.BuildIndex() in *REMOVED*\LDS\Global.asax.cs:line 38
4

1 回答 1

0

好的,我想我已经解决了。

当应用程序启动时,它在 NT AUTHORITY\NETWORK SERVICE 帐户下运行。

当一个正常的 web 请求进来时,它使用\IUSR_帐户执行。

在我的共享主机上,NETWORK SERVICE 帐户显然没有对 App_Data 文件夹的写入权限,但 IUSR 帐户有。

我认为这回答了为什么会出现问题的问题。

于 2013-03-07T21:28:28.553 回答