Pergunta

Eu estou usando o Firebird embarcado em um Asp.Net Web Site.Quando eu executo VS2010 como administrador eu posso chamar com êxito o banco de dados, se eu executar como um usuário diferente recebo este erro:

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()

Eu já implantado o serviço no IIS, mas eu recebo o mesmo erro quando chamá-lo.Também, para fazê-lo funcionar sob a conta de administrador que eu tinha para copiar fbemdeb.dll no windows/system32.

Eu tenho feito a mesma chamada para a DB a partir de dentro de um aplicativo de console e funciona para todas as contas de usuário.Eu só tenho este problema com o serviço da web.

Alguma sugestão?eu estou usando o Firebird 2.5

Foi útil?

Solução

Soa como um problema de permissão.O usuário que executa o pool de aplicativo provavelmente não pode salvar no disco.Isto é sugerido por que o rastreamento de pilha que você enviou:

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

Parece que o Firebird API você utiliza alguma técnica para criar um assembly em tempo de execução.Gostaria de olhar na documentação da API para ver se há uma maneira para configurar os diretórios temporários ou algo assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top