【问题标题】:Enterprise Library issue企业图书馆问题
【发布时间】:2014-11-19 18:57:51
【问题描述】:

我们正在使用 Enterprise Library 6.0 和以下代码来创建数据库实例并执行存储过程?任何帮助高度赞赏。提前致谢。

 DatabaseProviderFactory factory = new DatabaseProviderFactory();
             Database  db = factory.CreateDefault();

 DbCommand dbCommand = db.GetStoredProcCommand("ProcedureName");

                OracleParameter outval = new OracleParameter("Test", OracleDbType.RefCursor);
                outval.Direction = ParameterDirection.Output;
                dbCommand.Parameters.Add(outval);

                using (IDataReader reader = db.ExecuteReader(dbCommand))
                {
                    while (reader.Read())
                    {

                    }
                }

<add name="providerConnString" connectionString="Data Source=ABCD;Password=testuser;User ID=testpwd" providerName="Oracle.DataAccess.Client" />

我们间歇性地收到以下异常。当我们在空闲时间后尝试访问应用程序时会发生这种情况。企业库中的连接池是如何发生的?如果应用程序长时间处于空闲状态,它将如何工作?默认最小池大小和默认最大池大小是多少?

调用的目标已抛出异常。 System.Reflection.TargetInvocationException:已引发异常 通过调用的目标。 ---> System.TypeInitializationException:类型初始化程序 'Oracle.DataAccess.Client.OracleClientFactory' 抛出异常。 ---> System.TypeInitializationException:“Oracle.DataAccess.Client.CThreadPool”的类型初始化程序引发了异常。 ---> System.Runtime.InteropServices.COMException:检索 COM 类 具有 CLSID 的组件的工厂 {CB2F6723-AB3A-11D2-9C40-00C04FA30A3E} 由于以下原因而失败 错误:800703fa 尝试对具有 被标记为删除。 (来自 HRESULT 的异常:0x800703FA)。在 Oracle.DataAccess.Client.CThreadPool..cctor() --- 内部结束 异常堆栈跟踪 --- 在 Oracle.DataAccess.Client.OracleInit.Initialize() --- 内部结束 异常堆栈跟踪 --- --- 内部异常堆栈跟踪结束 --- 在 System.RuntimeFieldHandle.GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& 域初始化)在 System.Reflection.RtFieldInfo.UnsafeGetValue(Object obj) 在 System.Reflection.RtFieldInfo.InternalGetValue(对象 obj, StackCrawlMark 和 stackMark)在 System.Reflection.RtFieldInfo.GetValue(Object obj) 在 System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) 在 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDefaultMapping(字符串 dbProviderName) 在 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabaseData(ConnectionStringSettings 连接字符串,数据库设置数据库设置)在 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabase(字符串 名称)在 Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.b__2(字符串 n) 在 System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) 在 Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.CreateDefault()

【问题讨论】:

  • 企业库没有明确地做任何连接池。连接池将由底层提供者处理(在这种情况下,我相信 ODP.NET)。这个article 说使用组策略编辑器将“不要在用户注销时强制卸载用户注册表”选项更改为“启用”。

标签: c# asp.net .net enterprise-library


【解决方案1】:

我在 IIS 中遇到了与应用程序池身份用户有关的问题。我删除了身份用户并放置了默认身份用户。然后恢复为我的自定义用户身份。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2011-10-13
    相关资源
    最近更新 更多