c# - Oracle 连接请求超时 c#

标签 c# oracle

我目前正在开发一个可以做一些不同事情的应用程序,但我遇到了一个问题,该应用程序只能在我的和其他开发计算机上运行,​​而不是在非开发笔记本电脑和运行批处理任务的虚拟 PC 上运行

当我尝试在 Batch PC 和笔记本电脑上运行发布文件时,出现以下错误。

Exception took place in:  PR Get(OracleInternal.ConnectionPool.ConnectionString, Boolean, OracleInternal.ConnectionPool.CriteriaCtx, System.String, Boolean)
Data:  System.Collections.ListDictionaryInternal
H Result:  -2147467259
Message:  Connection request timed out
Stack Trace:     at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch)
at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch)
at OracleInternal.ConnectionPool.OracleConnectionDispenser 3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, CriteriaCtx criteriaCtx)
at Oracle.ManagedDataAccess.Client.OracleConnection.Open()
at BatchErrorScreenshotter.Program.DatabaseChecker.GetAllBatchesFromDB() in C:\Users\clm\documents\visual studio 2015\Projects\BatchErrorScreenshotter\BatchErrorScreenshotter\Program\DatabaseChecker.cs:line 25

使用的连接字符串

<connectionStrings>
<add name="OracleConnectionXALP" providerName="Oracle.ManagedDataAccess.Client"
  connectionString="User Id=XXXXX;Password=XXXXX;Data Source=XALP;Min Pool Size=2; Connection Lifetime=30;Connection Timeout=10;Incr Pool Size=1;Decr Pool Size=1"/>

我试过摆弄它,改变不同的值而结果没有太大变化。我尝试将最大池大小添加为 200,这是默认值 100 的增加值。但它不起作用。

以下是我连接到数据库并返回所需数据的代码。 (第 25 行是 -> conn.Open() )

public DatabaseCheckWrapper GetAllBatchesFromDB()
    {
        try
        {
            using (var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnectionXALP"].ConnectionString))
            {
                conn.Open(); // Line 25, Connection error happens here
                DatabaseCheckWrapper dbw = new DatabaseCheckWrapper();
                OracleCommand cmd = new OracleCommand()
                {
                    CommandText = $"xal_supervisor.batchmonitor_pkg.get_batchmonitor",
                    CommandType = CommandType.StoredProcedure,
                    Connection = conn
                };

                OracleParameter p1 = new OracleParameter
                { OracleDbType = OracleDbType.RefCursor, ParameterName = "batchmonitor_ud", Direction = ParameterDirection.Output };

                cmd.Parameters.AddRange(new[] { p1 });

                var reader = cmd.ExecuteReader();

                var batches = new List<BatchDeadCheck>();
                while (reader.Read())
                {
                    var batch = new BatchDeadCheck();
                    batch.DXDEMINUTTER = reader.GetInt32(0);
                    batch.ACCEPTDXDEMINUTTER = reader.GetInt32(1);
                    // ACTION NAME IS ?Mainwindowtitle?
                    batch.ACTIONNAME = $"{reader.GetString(2)} (tilsluttet)";
                    batch.SESSIONSTATUS = reader.GetString(3);
                    batch.ADVERSELEMAIL = reader.GetString(4);
                    batch.ILIVETID = reader.GetInt32(5);
                    batches.Add(batch);
                }
                dbw.DisplayText = $"> Database batch check was run at {DateTime.Now.ToString("T")}";
                dbw.Batches = batches;
                conn.Close();
                return dbw;
            }
        }
        catch (Exception e)
        {
            DatabaseCheckWrapper dbwError = new DatabaseCheckWrapper();
            dbwError.DisplayText = $"!!Error has occurred while retrieving data from the Database!!";
            dbwError.Batches = null;
            dbwError.Exception = e;
            return dbwError;
        }
    }

到目前为止,在谷歌搜索时,我已经检查了谷歌首页上的每个链接 “c# 连接请求超时” 我在 Oracle® Data Provider for .NET 中阅读了一些关于 oracle 连接池的内容。没有得到任何真正的解决方案

更新: 我决定尝试 ping 数据库服务器,发现我的笔记本电脑无法访问它,但批处理 PC 可以。所以我现在将在 Batch PC 上进行测试。我在 Batch PC 上第一次运行时也收到以下错误日志

Data:  System.Collections.ListDictionaryInternal
Inner Exception:  OracleInternal.Network.NetworkException (0x00002F7A): ORA-12154: TNS:could not resolve the connect identifier specified
at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName)
at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor)
at OracleInternal.Network.OracleCommunication.Connect(String tnsDescriptor, Boolean doNAHandshake, String IName)
at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, CriteriaCtx criteriaCtx, String instanceName)
Message:  ORA-12154: TNS:could not resolve the connect identifier specified
Stack Trace:     at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch)
at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch)
at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, CriteriaCtx criteriaCtx)
at Oracle.ManagedDataAccess.Client.OracleConnection.Open()
at BatchErrorScreenshotter.Program.DatabaseChecker.GetAllBatchesFromDB() in C:\Users\clm\documents\visual studio 2015\Projects\BatchErrorScreenshotter\BatchErrorScreenshotter\Program\DatabaseChecker.cs:line 25

最佳答案

您是否检查过 tnsnames.ora 文件在出现错误 ORA-12154 的机器上是否可用:TNS:无法解析指定的连接标识符

检查“TNS_ADMIN”的系统环境变量,如果没有找到,则引用应放置 tnsnames.ora 的文件夹创建它。然后从您的开发电脑上复制 tnsnames.ora。

关于c# - Oracle 连接请求超时 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47432448/

相关文章:

c# - 如何在 C# 中创建眼球追踪点的热图

c# - 将 C# 中的 DateTime.MinValue 替换为 sql

c# - `CallVirt` 和 `New` 关键字

c# - Entity Framework ,Dapper和SSDT的组合?

c# - 这个正则表达式在做什么 : new Regex( @"(?&lt;!\\),");

java - 是否有与 oracle 中的 q 运算符等效的 java?

java - 将整数列表从 Java 传递到 Oracle 函数

string - Oracle函数返回字符串之间的相似度

java - 带有 sun.security.validator.ValidatorException : PKIX path building failed 的 JDBC 异常

c# - 在 ASP.NET 中,如何在不刷新页面的情况下对 sqldatareader 数据进行 jquery/ajax 刷新?