【发布时间】:2010-10-09 11:34:05
【问题描述】:
我必须发送电子邮件、写入文件并调用网络服务。为了保持一致性,所有步骤都必须发生。如果任何步骤抛出异常或错误,则必须回滚所有步骤。
在我开始使用自己的对象 ACID 引擎之前,是否有任何普遍接受的模式用于在对象级别实现 ACID 语义?
更好的是,是否有任何现有的库可以用于 .NET 平台?
编辑:我知道发送电子邮件无法撤消,但无法连接到 SMTP 服务器会导致整个事务终止。另外,我希望它可以扩展以用于未来的操作。
【问题讨论】:
-
如何回滚电子邮件?
-
撤回会起作用。理论上,我可以将它从 Exchange 服务器中取出,就好像它从未发生过一样,但这可能会变得很可疑。
-
怀疑它会起作用。如果电子邮件已被阅读,通常无法撤回。如果是 SMTP 发送,您将(几乎)永远无法回忆它。
-
无论哪种方式,未能连接到 SMTP 中继足以导致事务终止,并且可以检测到。
-
重点是,您需要为要回滚的每个操作定义一个 UNDO 操作。一旦你有了它,你的答案可能就像 try..catch 一样简单,catch 调用撤消操作。
标签: .net transactions acid