- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对事务和 msdtc 如何协同工作有一些基本的困惑。
我有一个基本的服务器/客户端 winforms 应用程序。该应用程序使用transactionscope来封装在sql服务器上执行的多个sql命令。
当我仅在服务器上启用 msdtc 网络访问时,该应用程序似乎运行良好。然后有一天它停止工作,说网络访问未启用。
现在看来我必须在客户端计算机和服务器上启用 msdtc 网络访问才能使 transactionscope 正常工作。
客户端或服务器 msdtc 服务是否进行事务处理?或者两者皆有?
有谁能指导一下客户端和服务器是否都需要 msdtc 网络访问,还是只需要服务器?
最佳答案
如果您使用 MSDTC,那么您将需要客户端(您的应用程序)和服务器(数据库)来运行 MSDTC 并进行正确配置。
这可能是痛苦的根源,尤其是在处理防火墙时。如果您遇到问题,请参阅 Troubleshooting Problems with MSDTC 。它讨论的是 BizTalk,但一般适用于 MSDTC。 DTCPING也是你的 friend 。
现在,如果您使用 SQL Server 2005 及更高版本,仅访问一个数据库,使用一个数据库连接,并且不在应用程序域之间传递事务,那么您不应该需要使用 MSDTC。在这种情况下,System.Transactions 事务管理器将为您管理您的事务。如果发生上述任何一种情况,则该事务将提升为分布式事务(事务管理器将是 MSDTC)。请参阅Transaction Management Escalation了解更多信息。
一般来说,如果不需要,最好避免使用 MSDTC。即,如果您只处理单个 SQL Server 2005+ 数据库,则尝试将代码设计为不使用 MSDTC。除了配置麻烦之外,DTC 还会造成性能损失,因为对 MSDTC 的所有调用都在进程外,再加上两阶段提交协议(protocol)(MSDTC 使用)的开销。
就您的具体情况而言,很难说。如果您的代码没有更改,那么防火墙规则可能已更改?我还看到 Windows 更新更改了 DTC 配置(出于安全考虑),这导致了问题。
根据评论更新:
为了监视事务升级或升级,如果您没有使用任何分布式事务,我认为您可以使用一些分布式事务协调器性能计数器来跟踪已提交的事务。如果进行测试,您可以禁用 MSDTC 并查看您的代码是否失败。另一种方法是监视 SQL Server 中的事务。从编码的角度来看,您可以尝试处理 DistributedTransactionStarted事件并进行一些日志记录(但在投入生产之前删除该代码)。
有关使用单个连接的代码示例,请访问 TransactionScope MSDN 页面。基本上,创建一个 TransactionScope,创建一个 SqlConnection,使用 SqlConnection 进行一些操作,关闭连接,调用scope.Complete()。
请注意,如果您使用数据适配器方法,它们会自动管理您的连接,以便连接关闭或返回到连接池。无论哪种方式,如果调用另一个操作,则该事务将提升为 DTC 事务。请参阅System.Transactions and connection pooling了解更多详情。
关于.net - 关于交易和 msdtc 的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564454/
我的 ASP.NET Web 表单系统有问题。 它在我们的测试服务器上工作,但现在我们将其投入使用,其中一台服务器位于 DMZ 内,而 SQL 服务器位于该区域之外(尽管仍然在我们的网络上 - 尽管是
我现在面临 MSDTC 事务超时问题。由于历史原因,我们仍然有很多遗留代码通过 C++ ODBC 运行 DB 操作,并且连接默认升级为 MSDTC。问题是当我尝试执行一个超过 1 分钟的冗长操作时,事
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我有一个相当大的应用程序,它使用 MSDTC。我应该打开多少个端口?有什么办法可以确定吗? 编辑:我知道 什么 我需要打开的端口,我不知道多少我需要。 最佳答案 我想 Migol 想知道 RPC dy
如果我设置了两台 Windows Server 2008 r2 机器,我可以让分布式事务仅在一个方向上工作。当我可以使 DTCPing 成功工作时,DTC 正在工作。不过,DTCPing 仅在我从一台
我的应用程序中曾经遇到过以下异常, Unable to get the address of the distributed transaction coordinator for the serve
我在域中的计算机上运行的应用程序使用TransactionScope(依赖于MS DTC)。 SQL Server在域中未包含的计算机上运行。如何在域中的计算机和未在Windows域中运行的计算机上启
我有一个每天检索数据并将其存储到数据库中的应用程序。直到最近,此应用程序一直驻留在与 SQL 服务器相同的机器上,但由于一些所需外围设备的硬件问题,它已被移动到运行 Windows XP 的单独机器上
问题是我们在使用 TransactionScope 的独立网络服务器(Windows 2003 SP2 - 机器名称是 TESTAPP,可以在下面的日志中看到)上有一个网站。 SQL Server 2
我有一个带有两个表的 SQL Server 2008 数据库,一个使用 TransactionScope 的 .NET 4.5 应用程序,对数据库有两个查询,每个都使用它们自己的独立连接,共享一个单个
那么,MSDTC 是否会消耗系统(服务器和应用程序)的大量资源? 过去,我编写了几个依赖 MSDTC 进行数据库事务的大型 Web 应用程序。我从来没有调查过服务器上会有多少消耗。 目前,我正在使用
我有一个 WinForms/WCF/SQLServer 应用程序,我正在尝试像这样使用 MSDTC 事务: using System.Transactions; // ... var transOpt
我收到错误: communication with the underlying transaction manager has failed 当我尝试从 visual studio 2010 运行我
我工作的公司想在我们支持 SQL Server 的应用程序中使用 Always on 可用性组架构。我们有 3 个直接安装的数据库,其中一个按配置分区,我们目前使用 MSDTC 来协调这三个数据库之间
我注意到非常简单的分布式事务在第一次运行时需要很长时间(3-4 秒)才能完成。但是如果再次调用相同的事务范围,速度会快得多(30 毫秒)。似乎 MSDTC 在一个小时后进入休眠状态。一小时后,下一个要
我有两个存储库指向同一个 SQL Server 2008 R2 (10.50.2550.0) 数据库。一个存储库基于 Entity Framework ,另一个使用常规 SqlConnection。我
我以一种模糊的方式了解常规 ACID 事务的工作原理。您在数据库上执行一些工作,直到设置了某种提交标志才确认工作。提交部分基于一些基本假设(例如单个磁盘 block 写入是原子的)。如果发生灾难性错误
我对事务和 msdtc 如何协同工作有一些基本的困惑。 我有一个基本的服务器/客户端 winforms 应用程序。该应用程序使用transactionscope来封装在sql服务器上执行的多个sql命
在我们的项目中,我们使用 TransactionScope 来确保我们的数据访问层在事务中执行它的操作。我们的目标是不要求在最终用户的计算机上启用 MSDTC 服务。 问题是,在我们一半的开发人员机器
当我们需要在我们的应用程序中进行数据库访问时,我们使用以下模式: 为了查询,我们有一个带有方法 CreateOpenConnection 的静态工厂类这只不过是 new SqlConnection(m
我是一名优秀的程序员,十分优秀!