关于交易和 msdtc 的混淆

2024-01-09

我对事务和 msdtc 如何协同工作有一些基本的困惑。

我有一个基本的服务器/客户端 winforms 应用程序。该应用程序使用transactionscope来封装在sql服务器上执行的多个sql命令。

当我仅在服务器上启用 msdtc 网络访问时,该应用程序似乎运行良好。然后有一天,它停止工作,说网络访问未启用。

现在看来我必须在客户端计算机和服务器上启用 msdtc 网络访问才能使 transactionscope 正常工作。

客户端或服务器 msdtc 服务是否进行事务处理?或者也许两者兼而有之?

有谁能指导客户端和服务器是否都需要 msdtc 网络访问,还是只需要服务器?


如果您使用 MSDTC,那么您将需要客户端(您的应用程序)和服务器(数据库)来运行 MSDTC 并进行正确配置。

这可能是痛苦的根源,尤其是在处理防火墙时。如果您遇到问题请参阅解决 MSDTC 问题 http://msdn.microsoft.com/en-us/library/aa561924%28BTS.20%29.aspx。它讨论的是 BizTalk,但一般适用于 MSDTC。也是你的朋友。

现在,如果您使用 SQL Server 2005 及更高版本,仅访问一个数据库,使用一个数据库连接,并且不在应用程序域之间传递事务,那么您不应要求使用 MSDTC。在这种情况下,System.Transactions 事务管理器将为您管理您的事务。如果发生上述任何一种情况,则该事务将提升为分布式事务(事务管理器将是 MSDTC)。看交易管理升级 http://msdn.microsoft.com/en-us/library/ms229978.aspx了解更多信息。

一般来说,如果不需要,最好避免使用 MSDTC。即,如果您只处理单个 SQL Server 2005+ 数据库,则尝试将代码设计为不使用 MSDTC。除了配置麻烦之外,DTC 还会造成性能损失,因为对 MSDTC 的所有调用都在进程外,再加上两阶段提交协议(MSDTC 使用的)的开销。

就您的具体情况而言,很难说。如果您的代码没有更改,那么防火墙规则可能已更改?我还看到 Windows 更新更改了 DTC 配置(出于安全考虑),这导致了问题。

根据评论更新:

为了监视事务升级或升级,如果您没有使用任何分布式事务,我认为您可以使用一些分布式事务协调器性能计数器来跟踪已提交的事务。如果进行测试,您可以禁用 MSDTC 并查看您的代码是否失败。另一种方法是监视 SQL Server 中的事务。从编码的角度来看,您可以尝试处理分布式事务开始 http://msdn.microsoft.com/en-us/library/system.transactions.transactionmanager.distributedtransactionstarted.aspx事件并进行一些日志记录(但在投入生产之前删除该代码)。

有关使用单个连接的代码示例,请访问交易范围 http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspxMSDN 页面。基本上,创建一个 TransactionScope,创建一个 SqlConnection,使用 SqlConnection 进行一些操作,关闭连接,调用scope.Complete()。

请注意,如果您使用数据适配器方法,它们会自动管理您的连接,以便连接关闭或返回到连接池。无论哪种方式,如果调用另一个操作,则该事务将提升为 DTC 事务。看System.Transactions 和连接池 http://www.softinsight.com/bnoyes/2005/09/14/SystemTransactionsAndConnectionPooling.aspx更多细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于交易和 msdtc 的混淆 的相关文章

随机推荐

  • github PR 显示所有过去的提交

    我们最近改变了工作流程 我们在 github 上的 新 存储库有 2 个分支 master and develop master不受直接推送保护 仅合并 PR develop是所有乐趣发生的地方 功能分支被合并回develop git me
  • 在 Angular 2 中使用第三方库 (parse.com)

    我正在学习 Angular 2 并且已经遵循 Egghead 的教程 但我对有关 Angular 的一切都很陌生 现在我想做一些更高级的事情并开始将 Parse com 与 A ngular 2 结合使用 通常我会通过以下方式将 parse
  • OPC 节点路径中的“ns=2;s=”有何意义?

    我注意到所有 OPC 标签 ID 的前缀都是ns 2 s 可能的 NodeId 值的一些示例是 ns 2 s AcquisitionTimeRemaining ns 2 s Status ns 2 s Time 我想知道这个前缀的意义是什么
  • 在 Flutter 中创建自定义小部件

    import package flutter material dart import package font awesome flutter font awesome flutter dart int weight 60 class R
  • 获取城市名称不以元音开头或不以元音结尾

    从 STATION 查询不以元音开头或不以元音结尾的 CITY 名称列表 您的结果不能包含重复项 输入格式 STATION表描述如下 我写了下面的查询 但它对我不起作用 有什么建议吗 select distinct city from st
  • GitHub - 查找与提交关联的拉取请求

    我正在尝试查找过去的拉取请求 以查看对特定问题做出了哪些评论 操作 我知道该文件和更改 因此我可以通过查看指责视图来访问引入该文件的提交 但是 我找不到一种方法来查看第一次将该提交推送到分支的拉取请求 有没有办法做到这一点 或者我是否必须沿
  • ./*/ 是可移植的吗?

    我经常使用 在 for 循环中 for d in do do something with dirs done 匹配当前工作目录中的所有非隐藏目录 但我不确定这是否是一种可移植的方法 我的系统上安装了 bash dash 和 ksh 并且它
  • MySQL 返回其中列包含集合中的任何但仅包含关键字的所有行

    有没有一种方法可以选择其中一列仅包含但任意数量的预定义值的行 我一直在使用这个 但它返回我的列至少包含一个值的任何行 我知道这正是它应该做的 但我正在寻找一种方法来仅选择关键字列中仅包含我的关键字的行 SELECT FROM product
  • 如何以角度拖动和重新排序内容

    我有5个不同的内容 我想将其拖动并重新排序在同一行中 我如何在角度 2 4 5 或 6 中执行此操作 如果有人知道 请帮助我执行此操作 堆栈闪电战 https stackblitz com edit angular cc9ztn file
  • 如何在C++中随机分配给向量?

    我是 C 新手 并且不断被告知要使用std vector代替new 我正在尝试实现此功能 其中我知道向量的大小并希望随机 而不是顺序 分配给它 然而 当运行这个时 我的程序终止且没有错误输出 所以我很困惑 vector
  • OpenCV DNN,从tensorflow导入.pb文件断言失败错误:函数“populateNet”中的scaleMat.type() == CV_32FC1

    我试图导入一个冻结的 并使用tensorflow python tools optimize for inference优化 pb optimized pb 文件使用 cv2 dnn readNetFromTensorflow optimi
  • 匿名聚合中不允许使用构造函数,结构中的字符串

    所以我在尝试创建和使用这个结构时遇到了错误 使用字符而不是字符串的结构有效 但我发现我需要能够存储许多字母 使用下面的这个小代码示例后 我收到此错误 错误 成员 std cxx11 string GraphNode c1 在匿名聚合字符串
  • BlackBerry - Unicode 文本显示

    我想在 BlackBerry 设备上的 j2me 应用程序中的 LabelField 中显示一些阿拉伯文本 假设设备上安装了阿拉伯字体 在本地化资源中 如果使用阿拉伯语言环境 则所有文本都以 Unicode 序列保存 但是 如果我明确使用这
  • 在 R 中将不同的预测方法传递给分层时间序列预测?

    我有一个分层时间序列 其底层序列都表现出间歇性需求 使用 Hyndman 的 HTS 包在层次结构内实现最佳组合似乎是有利的 使用 Kourentzes 的 MAPA 包进行间歇性需求的多重聚合预测似乎也是有利的 本质上 我想做类似的事情
  • 编写 html 文件,其中包含在特定工作表和行中打开 Excel 应用程序的链接

    我正在编写一个非常简单的 HTML 文件 其中包含一些表格 我试图获得一个单元格值 它基本上是一个链接 通过单击链接 我想在 Excel 应用程序中的特定工作表和行中打开文件 Notes 视窗环境 HTML由标准浏览器打开 该文件存在于本地
  • 如何通过c# mvc函数传递两个参数来调用存储过程

    当我需要传递单个参数时 我可以轻松完成 如下所示 public ProjectsModel GetProjectListBySearch int projectId try using context new Exo ADBEntities
  • 有没有办法从某些 HTML 元素中排除 MathJax 处理?

    有没有办法从某些 HTML 元素中排除 MathJax 处理 例如 如果我知道 a 中没有任何数学 div 有没有办法标记它以便 MathJax 处理器跳过它 div 就在这里 使用tex2jax ignoreCSS 类 div class
  • C# 构造函数有 2 个参数,但声称它没有带有两个参数的构造函数

    所以这是我的问题 我有一个名为 Login 的类 它将用于登录和创建新的登录帐户 我创建了一个不带参数的登录构造函数 public Login gloID 0 Username null Password null Note null Ac
  • 逐个字段比较两个对象并显示差异[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想逐个字段比较两个对象 即两个数据库行 例如Object1 name ABC age 29 emai
  • 关于交易和 msdtc 的混淆

    我对事务和 msdtc 如何协同工作有一些基本的困惑 我有一个基本的服务器 客户端 winforms 应用程序 该应用程序使用transactionscope来封装在sql服务器上执行的多个sql命令 当我仅在服务器上启用 msdtc 网络