gpt4 book ai didi

wcf - 在 WCF (MSMQ) 服务中禁用 DTC

转载 作者:行者123 更新时间:2023-12-03 20:57:46 25 4
gpt4 key购买 nike

我正在使用 MSMQ 端点。我在我的服务上设置了以下属性。

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void MyMethod(MyParam param) { ... }

在我的界面上

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, ReleaseServiceInstanceOnTransactionComplete = true)]

我有一个更新 sql server 数据库的方法,并且始终使用 MSDTC 并提升事务。

我如何抑制它。如何连接到与 MSMQ 事务完全独立的事务中的 sql server。我只想要 sql 事务,而不是 DTC 事务。有什么办法可以保证sql事务不被包含在MSMQ事务的范围内。

我希望我可以在不完全删除 MSMQ 上的事务的情况下执行此操作,这正是我正在考虑的。

问候

克雷格

最佳答案

您在提示事务性 MSMQ 的核心含义。事务性 MSMQ 使用事务性读取和写入队列。因此,您的消息在事务中被读取,如果其读取/处理失败,读取将回滚并且消息不会从队列中删除。通过使用 TransactionScopeRequired 标记您的操作,您告诉 WCF your operation is part of message's transactional processing .如果您的数据库操作失败,MSMQ 读取也会失败,并且您的消息不会丢失。如果您在操作中打开数据库连接,事务将被提升为 DTC,因为您在单个事务中有两个事务资源。

因此,如果您不想要这种机制,请不要使用事务队列,但请仔细考虑。关闭事务队列的原因应该是你不需要它而不是你不想要分布式事务。

关于wcf - 在 WCF (MSMQ) 服务中禁用 DTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com