【发布时间】:2017-03-24 10:30:25
【问题描述】:
我想将 OleDbConnection 对象存储在具有 mode="StateServer" 或 mode="sqlserver" 的会话中,但在尝试此操作时出现错误,即无法序列化会话状态。在 stateserver 和 sqlserver 模式下,asp.net 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef。
【问题讨论】:
-
这是个坏主意,不要这样做。数据库连接应尽可能短。使用它们并丢弃它们,不要将它们放置超过必要的时间。您唯一可行的选择是存储特定于用户的连接字符串。
-
完全同意@Igor
-
@Igor 并非总是如此,对于某些用例的温暖的、随时可用的 连接有一些话要说。并不是说我保证它会进入一个会话
-
@MickyD - 我不同意,尤其是在你不知道下一个请求是否会进入的 asp.net 设置中(如果它有效,它可能会留下很多开放与周围的数据库的连接)。也是真的做不到。序列化是保存状态以供以后恢复的行为,但与数据库的打开连接不是以后可以捕获和恢复的。
-
编写一个 Windows 服务来保持连接打开并加入 MTS 事务。然后使用 tcp、命名管道或共享内存在 ASP.NET 服务器端和该服务之间进行交互。使用 MTS 事务处理客户端 http 请求毫无意义。
标签: c# asp.net serialization oledbconnection