Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在MVC中,一个Oracle连接贯穿整个会话_Sql_Asp.net Mvc_Oracle11g_Session Variables_Session State - Fatal编程技术网

Sql 在MVC中,一个Oracle连接贯穿整个会话

Sql 在MVC中,一个Oracle连接贯穿整个会话,sql,asp.net-mvc,oracle11g,session-variables,session-state,Sql,Asp.net Mvc,Oracle11g,Session Variables,Session State,我需要在MVC中为用户的整个会话创建一个连接 下面的代码是在登录控制器中编写的,用于实现相同的功能 OracleConnection con = new OracleConnection(); con.ConnectionString = ConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString; con.Open(); Session["oracle_con"] = con; 然后,每当我需要连接时

我需要在MVC中为用户的整个会话创建一个连接

下面的代码是在登录控制器中编写的,用于实现相同的功能

OracleConnection con = new OracleConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString;
con.Open();
Session["oracle_con"] = con;
然后,每当我需要连接时,将按以下方式进行检查

 OracleConnection or_con = (OracleConnection)Session["oracle_con"];
  if (or_con.State == ConnectionState.Closed)
    or_con.Open();
这在我的本地系统中运行良好,会话状态模式为“InProc”

但在服务器中,会话状态模式为“StateServer”,因此Oracle连接到会话的转换会产生以下错误

无法序列化会话状态。在“StateServer”和 “SQLServer”模式,ASP.NET将序列化会话状态对象, 因此,不可序列化对象或MarshalByRef对象是 不允许。如果存在类似的序列化,则同样的限制也适用 由自定义会话状态存储在“自定义”模式下完成

[序列化异常:类型] 程序集中的“Oracle.ManagedDataAccess.Client.OracleConnection” 'Oracle.ManagedDataAccess,版本=4.121.1.0,区域性=中性, PublicKeyToken=89b483f429c47342'未标记为可序列化。]


这是实现我的要求的正确方法还是其他方法?

OracleConnection没有实现Serializable,因此这对您尝试的操作不起作用。为什么要将连接置于会话中?默认情况下,ODP.NET使用连接池,因此不必从头创建新的连接请求

如果连接创建缓慢,可能是因为缺少必须创建的日志文件夹C:\oracle\U client\log\diag\client


看这里,还有这里

一般来说,在会话中存储连接是一种古老而糟糕的做法。它妨碍了正确使用连接池的能力。连接是您可以拥有的最有价值的资源之一,保留一个连接而不将其返回池将导致服务器最终耗尽。通常,应创建、打开连接,立即使用,并在检索到数据后立即关闭,以便将其返回池。@MarkFitzpatrick我同意u..pblm每次尝试打开连接时都会花费1分钟以上的时间,使应用程序速度变慢..oracle数据库中出现问题..他们无法修复yeti同意u..pblm这里是每个当我试图打开连接时,它花费了1分钟以上,并且使应用程序速度变慢。它的问题来自oracle。他们无法修复。这可能是因为它正在查找的文件夹丢失。oracle中的文件夹丢失?不是在oracle服务器上,而是在应用程序运行的地方。它发生在所有应用程序中。如果我写一个简单的表单应用程序也是如此