问题标签 [system.transactions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
architecture - System.Transactions 中避免事务升级的策略
因此,根据我上一个问题的答案,如果在事务期间打开多个连接,即使这些连接都具有相同的连接字符串,事务也会从 LTM 提升到 DTC 。
那么,我的下一个问题是,可以采用哪些策略来避免这种“功能”?在我看来,根据资源使用情况,我想确保尽可能多地使用 LTM。在正确面向对象的业务逻辑层中,我能想到的唯一方法是在数据访问层创建一个请求级静态连接对象,并在调用之间共享该对象,直到请求完成(这里的隐含知识是业务对象实体是谨慎的并且不知道它们会被调用的顺序,另外一个事实是人们不希望将连接对象冒泡到业务对象层,因为那将是数据存储实现细节渗入另一层)。
还有其他人有什么想法不会完全破坏 n 层系统的层封装吗?
transactions - 交易范围
事务范围如何工作?它如何知道何时已经使用了另一个上下文以及我如何在我的代码中实现另一种范围。
我主要是 vb.net 开发人员,但如果你写的话,我可以阅读 c#。
如果上述内容过于模糊:
我了解 system.transactions 的作用以及如何使用它。我想知道的是如何创建类似的东西,我自己的库,我可以包装一些可以以与 system.transactions 范围相同的方式处理它的代码。我计划将它与缓存模型一起使用,它将大大增强它。我正在寻找有关事务范围如何知道的详细信息,例如存在父范围,因此它可以附加到它等等,或者提交需要在更高级别或更高联系人中进行。
例如,如果我有以下
Scope1 不会提交,因此 scope2 或 scope3 也不会提交,因为它们的父级都是 scope1 的上下文。我希望能够使用我自己的库进行设置。
trace - 跟踪交易升级到 DTC 的原因
有什么方法可以准确地确定 System.Transaction TrasactionScope 升级到 DTC 的原因?我们的一个组件似乎升级了事务,而所有其他组件(看起来很相似)都没有升级,我们遇到了一个问题。
是否提供了有关升级原因以及如何找到和观察这些原因的任何信息?SQL 探查器?日志文件?还是我在这方面不走运?
更新:我正在针对 SQL Server 2005 运行以获取信息
c# - Java 事务 API 和 .NET System.Transactions
我正在分析 JTA(Java 事务 API)和 .NET 对应的 System.Transactions 之间的不同行为:两者之间的方法完全不同。事实上,Java 版本的 Transactions 似乎更像是一种规范,让开发人员有义务实现定义的Transactions
和TransactionManager
其他接口。.NET 有一个更具体的实现,它不允许开发人员定义自己的Transaction
对象,但提供接口来处理事务生命周期内管理的资源(而 Java 提供一些 XTA* 接口用于相同目的)
我想知道是否有人有机会将一些使用 JTA 的 Java 代码移植到 .NET,他/她注意到了哪些主要差异。
此外,谁能澄清我
TransactionManager.setRollbackOnly
反对TransactionManager.rollback
(在JTA中)的行为?.NET 版本只有Transaction.Rollback
更重要的方法。
c# - .net 持久资源管理器,用于事务文件系统访问
我正试图围绕 C# 中 System.Transactions 命名空间的使用。我在 MSDN 上找到了一些关于使用资源管理器的文档,但它只详细介绍了易失性内存资源管理器(如 Transactional )。我基本上是在寻找可以在 TransactionScope 中使用的东西,就像 Transactional<> 一样,但用它来写入/修改/删除磁盘上的文件。标准库中是否存在类似的东西?我已经读到 NTFS 现在有“TxF”以允许事务文件系统访问——我期待在 .net 中找到利用它的东西。也许我需要实现自己的?
c# - 在 SQL Server 2005 上使用 System.Transactions 的 TransactionInDoubtException
这篇文章的基本问题是“为什么非推广的 LTM 交易会受到质疑?”
我收到 System.Transactions.TransactionInDoubtException ,我无法解释原因。不幸的是,我无法重现此问题,但根据跟踪文件,它确实发生了。我正在使用 SQL 2005,连接到一个数据库并使用一个 SQLConnection,所以我不希望进行升级。错误消息指示超时。但是,有时我会收到一条超时消息,但例外是事务已中止而不是有疑问,这更容易处理。
这是完整的堆栈跟踪:
有任何想法吗?为什么我会怀疑,当我得到它时应该怎么做?
编辑以获取更多信息
我实际上仍然没有这个答案。我确实意识到事务实际上是部分提交的。一个表得到插入,但另一个没有得到更新。代码被大量追踪,我没有太多的空间可以遗漏一些东西。
有没有办法可以很容易地找出交易是否已被促进。我们可以从堆栈跟踪中判断它是否存在吗?单阶段提交(在 strack 跟踪中)似乎对我没有任何提升,但也许我错过了一些东西。如果它没有得到提升,那它怎么可能有疑问。
另一个有趣的难题是我创建了当前事务的克隆。我这样做是为了解决这个问题。 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=914869&SiteID=1
不幸的是,我不知道这个问题是否已经解决。也许创建克隆会导致问题。这是相关代码
谢谢
f# - 这里需要嵌套记忆的东西吗?
众所周知,System.Transactions 将涉及到同一数据库的多个连接的事务升级到 DTC。下面的模块和帮助程序类ConnectionContext
旨在通过确保对同一数据库的多个连接请求返回相同的连接对象来防止这种情况。从某种意义上说,这就是记忆,尽管有很多东西被记忆,第二个依赖于第一个。有没有办法在这个模块中隐藏同步和/或可变状态(可能使用记忆),或者可能以更实用的风格重写它?
(通过连接字符串获取连接时没有锁定可能一文不值,因为 Transaction.Current 是ThreadStatic
。)
c# - MSDTC 尝试在分布式事务中登记客户端计算机
我们看到 MSDTC 记录了以下间歇性警告:
调用方已尝试将事务传播到远程系统,但机器“X”上当前禁用了 MSDTC 网络 DTC 访问。请查看 MS DTC 配置设置。
但是,MSDTC 在机器 X 上被设计为禁用 - 它是客户端机器,并且在事务中没有征用任何业务!
- 通过 TCP 托管 WCF 服务的多个 Windows 服务端点
- 下面的单个 SQL Server 2005 实例
- 链接到 Sql
- 远程客户端通过 WCF/TCP 接收事件回调
这个问题很难重现 - 通常在重新启动服务之后。我们怀疑客户端机器的回调发生在事务的上下文中。
只是想知道是否有人见过类似的问题?
肯
c# - .net 如何允许使用 TransactionScopeOption 进行嵌套事务
我了解到 Oracle & sql server 数据库不允许嵌套事务。那么c#是如何让我们使用transactionscopeoption来执行嵌套事务的呢?
.net - System.Transactions 的实际用途是什么?
我已经看到System.Transactions命名空间,并且想知道,我真的可以使用这个命名空间使用 RDMBS 吗?
但是当我看到一些例子时,我不明白 System.Transactions 除了简单的 try catch 和让我们获得成功/失败结果之外如何做任何事情?
这是 MSDN 网站上的示例,我知道它可能非常简单,但我无法理解此示例中的好处,有人可以告诉我以下示例中简单的 try/catch 和 Transaction 范围之间的区别。
如果我应该创建一个 RDBMS(创建我自己的 RDMBS),我知道我们必须将我们执行的操作的大量日志写入磁盘,最后我们在回滚的情况下撤消这些操作,但这里什么都没有关于撤消任何事情。
在上面的例子中,我们提交了什么?我猜 SQL 客户端库会做所有正确的事情吗?这是否意味着 System.IO.StringWriter 将包含所有成功文本或所有失败文本?或者 TransactionScope 的范围之间是否有任何锁定?