我们有一个运行于Windows Server 2012的IIS 7.5托管的.Net Framework 4.0(64位)网站。它使用Windows身份验证。它使用的是64位12c ODP.NET客户端,版本为4.121.2.0。该网站具有自己的应用程序池。将应用程序池配置为使用域帐户作为标识时,它将起作用。按照建议的做法,当我们更改应用程序池以在ApplicationPoolIdentity下运行时,我们会收到“无法建立数据库连接:'Oracle.DataAccess.Client.OracleConnection'的类型初始值设定项引发了异常。”
基于某些线程,我已授予IIS AppPool \ AppPoolName访问ODP.NET和Oracle 12g客户端安装路径下的bin文件夹的权限,但仍然会遇到相同的错误。
请注意,我已经看到了与SQL Server身份验证问题有关的线程,Microsoft KB对此问题进行了说明,要求密码更改后重新启动服务器,但这仅适用于Windows 7和Windows 2008。
代码。不适用
答案 0 :(得分:0)
这原来是一个权限问题。 我发布的原始错误仅包含exp.Message。 然后,我将exp.InnerException添加到消息中,并得到以下消息:
错误:无法建立数据库连接:Oracle.DataAccess.Client.OracleConnection的类型初始值设定项引发异常。内部异常:System.TypeInitializationException:Oracle.DataAccess.Client.OracleConnection的类型初始值设定项引发一个例外。 ---> System.DllNotFoundException:无法加载DLL'OraOps12.dll':访问被拒绝。 (HRESULT的异常:0x80070005(E_ACCESSDENIED))在Oracle.DataAccess.Client.OracleInit.Initialize()在Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version)在Oracle.DataAccess.Client.OracleConnection..cctor()- -内部异常堆栈跟踪的结尾---在CLASS.Common.Database.ClassDbConnection.Open(String connectionStr)处的Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)处
我们通过将IIS AppPool / AppPoolName的读取和执行权限添加到安装Oracle 12客户端的文件夹结构中来解决此问题。事实证明,ODP.Net安装涉及的客户端根目录下的文件夹要比odp.net文件夹更多。
所有这些都不是必须的,但是我们在并非总是设置安全策略的环境中进行操作。