Sql 在MVC中,一个Oracle连接贯穿整个会话
我需要在MVC中为用户的整个会话创建一个连接 下面的代码是在登录控制器中编写的,用于实现相同的功能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; 然后,每当我需要连接时
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服务器上,而是在应用程序运行的地方。它发生在所有应用程序中。如果我写一个简单的表单应用程序也是如此