首页 > 解决方案 > 通过 MVC 中的会话建立一个 Oracle 连接

问题描述

我需要在 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();

这在我的本地系统中运行良好,sessin 状态模式是“InProc”

但在服务器中,会话状态模式为"StateServer",因此将 Oracle 连接转换为会话会出现以下错误

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

[SerializationException:在程序集“Oracle.ManagedDataAccess,版本=4.121.1.0,Culture=neutral,PublicKeyToken=89b483f429c47342”中键入“Oracle.ManagedDataAccess.Client.OracleConnection”未标记为可序列化。]

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

标签: sqlasp.net-mvcoracle11gsession-variablessession-state

解决方案


OracleConnection 没有实现 Serializable ,因此它不适用于您想要做的事情。为什么要将连接放在会话中?ODP.NET 默认使用连接池,因此不必从头开始创建新的连接请求。

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

见这里,创建 32 位 ODP.Net OracleConnection 对象非常慢,这里,http ://milagaia.blogspot.com/2012/04/odpnet-slow-first-connection.html?m=1 。


推荐阅读