我正在使用嵌入在ASP.NET网站中的Firebird。当我以管理员身份运行VS2010时,我可以成功调用数据库,如果我将其运行为其他用户,我会收到此错误:

System.IO.IOException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
   at System.Reflection.Emit.ModuleBuilder.SavePEFile(RuntimeModule module, String fileName, Int32 entryPoint, Int32 isExe, Boolean isManifestFile)
   at System.Reflection.Emit.ModuleBuilder.Save(String fileName, Boolean isAssemblyFile, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
   at System.Reflection.Emit.AssemblyBuilder.SaveNoLock(String assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
   at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
   at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName)
   at FirebirdSql.Data.Client.Native.FbClientFactory.CreateInstance(TypeBuilder tb)
   at FirebirdSql.Data.Client.Native.FbClientFactory.GenerateFbClient(String dllName)
   at FirebirdSql.Data.Client.Native.FbClientFactory.GetFbClient(String dllName)
   at FirebirdSql.Data.Client.Native.FesDatabase..ctor(String dllName, Charset charset)
   at FirebirdSql.Data.FirebirdClient.ClientFactory.CreateDatabase(FbConnectionString options)
   at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
   at FirebirdSql.Data.FirebirdClient.FbConnectionPool.Create()
   at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut()
   at FirebirdSql.Data.FirebirdClient.FbConnection.Open()
.

我已经部署了IIS中的服务,但在调用它时我会得到相同的错误。此外,要在管理员帐户下工作,我必须在Windows / System32中复制FBEMDeb.dll。

我从控制台应用程序中完成了对DB的同一调用,它适用于所有用户帐户。我只有Web服务只有这个问题。

任何建议? 我正在使用Firebird 2.5

有帮助吗?

解决方案

听起来像一个权限问题。运行App Pool的用户可能无法在磁盘上保存。这是由您发送的堆栈跟踪建议:

   at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName)
.

看起来像Firebird API你正在使用一些技术来在运行时构建一个程序集。我会看看API文档,看看是否有一种方法来配置任何临时目录或类似的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top