作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的应用程序中使用了 TransactionScope
类,因为我需要以交互方式、自然地执行一些操作(要么全部成功,要么全都不成功)。
由于此操作不仅与数据库相关,我通过实现 IEnlistmentNotification
接口(interface)为磁盘和系统服务操作(例如事务性文件移动和服务停止)定义了我自己的事务性行为。毫无疑问,它工作正常,但是当我将所有这些东西放在一个应用程序中时,我得到了意想不到的结果。
想象一下下面的情况
using(var ts = ...)
{
TxServiceManager.StopServices(services);
TxFileManager.MoveFiles(files);
DbManager.RunChangeScripts(scripts);
TxServiceManager.StartServices(services);
ts.Complete();
}
在遇到需要回滚所有操作的情况之前,它一直工作得很好。它发生在启动服务时,我想,交易范围将
但是你猜怎么着?它简单地从代码 list 中的第一个操作开始,即服务停止,当然通过启动服务回滚。好的,服务正在运行,然后在第二次操作时失败,因为我无法覆盖这些服务在运行时使用的文件。
为什么回滚从第一个操作开始而不是从最后一个操作开始?
最佳答案
因为简单(来自 MSDN ):
You should be aware that notifications might not be sent sequentially, or in a particular order.
未定义顺序。
关于c# - TransactionScope 以错误的顺序回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18888241/
我是一名优秀的程序员,十分优秀!