请考虑以下代码:
try
{
using(TransactionScope)
{
Process.Start("SQLInstaller.EXE");
throw new Exception();
Commit();
}
}
catch(Exception ex)
{
//Do something here
}
SQLInstaller.exe所做的更改是否会在此方案中回滚?更具体地说,通过Process.Start()启动的外部进程所做的更改是由TxF处理的吗?
谢谢!
答案 0 :(得分:1)
启动过程不会自动完成事务处理。
这确实是模型是隐式还是显式的问题。我们特别选择了一个显式模型,因为隐式模型极难推理。例如,考虑一下如果创建的进程关闭并进行了一个没有通过管道传递的RPC调用会是什么样的:RPC客户端和服务器是否具有一致的世界视图?
简短回答:不。
答案 1 :(得分:0)
疑。外部流程完全不了解您的交易范围。如果您是外部流程的编码人员并且有办法传递交易句柄,当然,但在这种情况下,极不可能。
答案 2 :(得分:0)
一切都取决于如何获得文件句柄。如果使用简单的File.OpenWrite
或任何标准.NET文件操作方法打开文件,那么您可以非常确定其访问权限不是事务性的。每次尝试打开句柄时都需要使用CreateFileTransacted
。