C#.net核心在expire_time之后重新启动Oracle的会话

时间:2018-02-22 06:44:55

标签: c# oracle asp.net-core

.net核心(C#)上的WebApi项目使用System.Data.OracleClient dotNetCore.Data.OracleClient(.Net Core的非官方Oracle客户端)Nuget的软件包(可能非常重要)

在webapi中,我调用Oracle的存储过程,例如:

string cs = Environment.GetEnvironmentVariable("ORACLE_CS");
  using (DbConnection connection = new OracleConnection(cs)) {
    connection.Open();
    using (var command = connection.CreateCommand()) {
      command.CommandText = "sp_check";
      command.CommandType = CommandType.StoredProcedure;
      command.ExecuteNonQuery();
      connection.Close();
    }
}

DB Oracle的参数sqlnet.expire_time设置为3分钟

当我第一次打电话给sp时 - 它工作得很好,如果我不再迟到3分钟再拨打一次电话也可以工作 但如果我在打完最后一个节目后3分钟后调用程序,我就会出现异常

RA-03135: connection lost contact
Process ID: 83002
Session ID: 450 Serial number: 7747

如果我再打一次电话,我有异常

ORA-03114: not connected to ORACLE

我理解会话已过期,但每次我想调用程序时,我都会打开连接。我也听说当我connection.Open()每次都没有进行新的会话而只是使用旧会话时。

怎么样?当我遇到会话过期的异常时,如何启动新的Oracle会话?

P.S。:当我在调试配置中运行时发生这个问题,当我在发布配置上运行时,这项工作每次都没有问题

1 个答案:

答案 0 :(得分:1)

您必须禁用连接池

相关问题