0

我已经为此苦苦挣扎了好几天。代码在我的开发机器上成功运行并连接到数据库,但是当我将它部署到服务器时,出现此错误。我正在使用 Oracle.ManagedDataAccess。这是我到目前为止所尝试的。

检查是32位还是64位。原来是 64bit Checked TNS Names 文件。这是正确的检查两台机器都在同一个网络上。他们是。尝试创建一个连接到数据库的精简控制台应用程序。控制台应用程序在两台机器上都运行。主应用程序无法在服务器上运行。尝试创建一个连接到数据库的精简 Web 表单应用程序。Web 表单应用程序重现了该错误,排除了主应用程序本身的问题。尝试将超时值加倍。尝试将超时值减少到 1 秒。尝试关闭连接池。尝试增加连接池大小。尝试赋予 IIS_IUSR 对 Oracle 主目录的完全权限。尝试重新启动服务器。试过了<setting name="SQLNET.AUTHENTICATION_SERVICES" value="null" />

这是小型 Web 应用程序的代码。

        string sql = @"

            SELECT *
            FROM SIMMS_TAB

        ";

        context.Response.ContentType = "text/plain";
        
        int rows = 0;

        try
        {
            using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            {
                conn.Open();

                OracleCommand cmd = conn.CreateCommand();

                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sql;

                var reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    rows++;
                }

            }

            context.Response.Write(string.Format("Successfully connected! Found {0} rows.<br />", rows));
        }
        catch (Exception ex)
        {
            context.Response.Write(ex);
        }

异常文字如下

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): Connection request timed out
   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 StripedDownWebApplication.TestHandler.ProcessRequest(HttpContext context) in C:\Users\mikem\Source\Repos\StripedDownWebApplication\TestHandler.ashx.cs:line 34
4

1 回答 1

0

就我而言,这个问题变得非常微妙。首先,我的连接字符串的 retry_count 和 retry_delay 设置得如此之高,以至于一次又一次地重试相同的失败连接时超时,因此从未向我显示实际发生的异常。一旦我将它们设置为一个更合理的值,比如 3,我得到了一个不同的错误,一个 ssl 握手失败。然后通过将 IIS 中的应用程序池中的 LoadUserProfile 设置设置为 true 来解决此问题。在此之后,问题就消失了。这令人沮丧,但我希望这对将来遇到此问题的人有所帮助。

于 2021-08-26T20:45:23.417 回答