我已经为此苦苦挣扎了好几天。代码在我的开发机器上成功运行并连接到数据库,但是当我将它部署到服务器时,出现此错误。我正在使用 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