Servizio Web Firebird e ASP.NET
-
21-12-2019 - |
Domanda
Sto usando Firebird incorporato in un sito Web ASP.NET.Quando eseguo vs2010 come amministratore posso chiamare con successo il database, se lo eseguo come un utente diverso ottengo questo errore:
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()
.
Ho schierato il servizio in IIS ma ottengo lo stesso errore quando lo chiamano.Inoltre, per farlo funzionare con l'account amministratore ho dovuto copiare fbemdeb.dll in Windows / System32.
Ho fatto la stessa chiamata al DB dall'interno di un'applicazione console e funziona per tutti gli account utente.Ho solo questo problema con il servizio web.
Qualche suggerimento? Sto usando Firebird 2.5
Soluzione
suona come un problema di autorizzazione.L'utente che esegue probabilmente la pool dell'app non può salvare sul disco.Questo è suggerito dalla traccia dello stack che hai inviato:
at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName)
.
Sembra che l'API Firebird sia utilizzata una certa tecnica per costruire un assembly in runtime.Guarderei nella documentazione API per vedere se c'è un modo per configurare qualsiasi directory temporanea o qualcosa del genere.