【问题标题】:type initializer for 'Oracle.DataAccess.Client.OracleConnection' failed using Application Pool Identity“Oracle.DataAccess.Client.OracleConnection”的类型初始化程序使用应用程序池标识失败
【发布时间】:2019-07-17 20:44:24
【问题描述】:

我们有一个网站,.Net framework 4.0,64 位,托管在 IIS 7.5 中,在 Windows Server 2012 上运行。它使用 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。

代码。不适用

【问题讨论】:

    标签: oracle iis iis-7.5


    【解决方案1】:

    这原来是一个权限问题。 我发布的原始错误仅包括 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.OracleConnection..cctor() 的 Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version) - -- 内部异常堆栈跟踪结束 --- 在 CLASS.Common.Database.ClassDbConnection.Open(String connectionStr) 处的 Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)

    我们通过将 IIS AppPool/AppPoolName 的读取和执行权限添加到安装 Oracle 12 客户端的文件夹结构来解决此问题。事实证明,ODP.Net 安装涉及客户端根目录下的更多文件夹,而不仅仅是 odp.net 文件夹。

    所有这些都不应该是必要的,但我们在我们并不总是设置安全策略的环境中运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-30
      • 2012-09-10
      • 2011-10-15
      • 1970-01-01
      • 2016-04-26
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多