Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
序列化.Net SqlTransaction?_.net_Asp.net_Serialization_Ado.net - Fatal编程技术网

序列化.Net SqlTransaction?

序列化.Net SqlTransaction?,.net,asp.net,serialization,ado.net,.net,Asp.net,Serialization,Ado.net,我们有一个有趣的设置,将SqlTransactions持久化到web应用程序上的应用程序内存中。我们正在考虑将我们的web应用程序迁移到NLB场景中,因此我们需要一种方法,使这些事务不会绑定到单个计算机的内存。我们有什么办法可以做到这一点吗?我试过序列化一个SqlTransaction和一个SqlCommand,但两种方法都不起作用。我需要开始查看System.Transactions命名空间吗?我认为这不可行。交易被设计为临时的和本地的 编辑 也许“transient”比“temporary”

我们有一个有趣的设置,将SqlTransactions持久化到web应用程序上的应用程序内存中。我们正在考虑将我们的web应用程序迁移到NLB场景中,因此我们需要一种方法,使这些事务不会绑定到单个计算机的内存。我们有什么办法可以做到这一点吗?我试过序列化一个SqlTransaction和一个SqlCommand,但两种方法都不起作用。我需要开始查看System.Transactions命名空间吗?

我认为这不可行。交易被设计为临时的和本地的

编辑


也许“transient”比“temporary”更好。将
SqlTransaction
存储在
Application
状态没有任何意义。事务不应跨越单个请求


我假设您知道
应用程序
状态由所有用户共享


为什么使用
应用程序
状态而不是
会话
状态<代码>会话可以跨负载平衡器工作,可以使用状态服务器,也可以使用SQL Server形式的会话持久性。

您可能需要查看。我个人没有使用它来处理多个请求之间的事务,但这就是它的用途。该链接是COM和Win32的开发人员指南。以下是我认为可以帮助您开始使用.NET的内容

我以前没有做过这种事情,但是SqlTransaction有一个CreateObjRef方法,它返回一个ObjRef,可以序列化。而ObjRef似乎就是你应该来回使用的mashal


首先,序列化仅用于捕获值/值类型sstudf(如字符串、数字等)的快照。对于特定用户,事务在短时间内(超时)处于“活动”状态,具有x个资源(通常连接到数据库)。因为这些东西在不断变化,如果可能的话,序列化然后恢复它们会把事情搞砸,因为很多事情都会改变,你会有混乱


如果事务应该是可序列化的,那么它们就会实现接口,你所要求的就是糟糕/愚蠢。

我很好奇为什么你认为你可能需要这样做。你不能不序列化就将它放在应用程序[]中?@quillbreaker:NLB是网络负载平衡,因此,每个HTTP POST可能都会发送到服务器场中的不同web服务器。应用程序数组是每台机器特有的,因此有了序列化数据的想法,以便可以将数据从一台机器移动到另一台机器。更清楚地说,我希望能够做到以下几点:启动一个事务,在该事务中执行一些sql。稍后(比如第二个或两个,但我现有的所有对象/连接都超出了范围),使用相同的事务对象(希望在某个地方序列化),执行并提交另一批sql。可能的不可能?史蒂文:对。知道了。这与我在尝试创建可序列化的SqlDataAdapter时遇到的情况相同-SqlTransaction是一个密封类。为什么一个事务不能跨越多个请求?这就是交易的全部要点!不,不是。顺便说一句,我指的是HTTP请求。事务的目的是确保多个数据库操作作为一个操作成功或失败。如果您的网站在一个请求中执行一个操作,然后在另一个请求中返回并执行另一个操作,那么您真的不了解web是如何工作的。如果用户在第一次操作后关闭计算机会发生什么?我知道网络是如何工作的,TYVM。但多年来,交易可以而且已经跨越了网络世界中的多个请求。例如:WCF事务()。我想你可能会被他询问SQL事务的事实所困扰。事实上,他已经拥有跨多个HTTP请求的事务;他只是想在多台机器之间移动它们,因为他现在正在进行负载平衡。WCF事务是分布式事务,而且应该是分布式事务。我向你保证我知道这些。这似乎有所不同:将web应用程序视为桌面应用程序,在
application
中保存事务,就像在表单的成员变量或全局变量中保存事务一样。它没有考虑到web以无状态的方式工作得更好,在一个请求和下一个请求之间发生的事情,以及web应用程序中的控制级别低于桌面应用程序中的控制级别。希望我的理由是错误的。即使是在桌面应用程序中,这也是一个坏主意,而且已经持续了几十年。您已经完成了等待用户输入的事务!如果他们去吃午饭呢!您保留着事务和相应的锁,坐在那里等待人们!在.NET中不需要针对DTC进行编程。如有必要,SqlTransaction将升级为分布式事务。@Randolpho:如果我理解正确,DTC的要点是允许单个请求跨层。换句话说,这是为了更深入,而不是更广泛。我弄错了吗?