Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用SQL Azure数据库时未激发TransactionManager.DistributedTransactionStarted事件_.net_Transactions_Azure Sql Database_Distributed Transactions - Fatal编程技术网

.net 使用SQL Azure数据库时未激发TransactionManager.DistributedTransactionStarted事件

.net 使用SQL Azure数据库时未激发TransactionManager.DistributedTransactionStarted事件,.net,transactions,azure-sql-database,distributed-transactions,.net,Transactions,Azure Sql Database,Distributed Transactions,我需要在一个大项目中检测事务提升(我想记录这些情况的调用堆栈)。我正在使用TransactionManager.DistributedTransactionStarted事件来检测这种情况。它可以在本地PC和任何本地SQL数据库上正常工作。但是,当连接到SQL Azure时,事件不会被触发 您可以通过运行以下代码来模拟行为: 类程序 { 私有静态void Main() { TransactionManager.DistributedTransactionStarted+=(发件人,参数)=> {

我需要在一个大项目中检测事务提升(我想记录这些情况的调用堆栈)。我正在使用
TransactionManager.DistributedTransactionStarted
事件来检测这种情况。它可以在本地PC和任何本地SQL数据库上正常工作。但是,当连接到SQL Azure时,事件不会被触发

您可以通过运行以下代码来模拟行为:

类程序
{
私有静态void Main()
{
TransactionManager.DistributedTransactionStarted+=(发件人,参数)=>
{
WriteLine(“分布式事务已启动!”);
};
var connectionStrings=新的ConnectionStringSettings[]
{
新连接字符串设置(“本地”,“数据源=。\\sqlexpress;集成安全性=真;数据库=测试”),
新连接字符串设置(“Azure”,“用户id=****;密码=****;数据源=***.database.windows.net;database=Test”)
};
foreach(connectionString中的var connectionString)
{
WriteLine(“Testing{0}…”,connectionString.Name);
使用(var ts=new TransactionScope())
{
WriteLine(“打开到{0}的第一个连接”,connectionString.Name);
正在使用(var c1=新的SqlConnection(connectionString.connectionString))
{
c1.Open();
WriteLine(“打开到{0}的第二个连接”,connectionString.Name);
使用(var c2=新的SqlConnection(connectionString.connectionString))
{
c2.Open();
}
}
ts.完成();
}
WriteLine(“结束测试{0}…”,connectionString.Name);
}
}
}
代码生成的日志如下所示:

正在测试本地。。。
正在打开与本地服务器的第一个连接
正在打开与本地的第二个连接
分布式事务已启动!
结束测试本地。。。
正在测试Azure。。。
正在打开与Azure的第一个连接
正在打开与Azure的第二个连接
结束测试Azure。。。
有什么区别?是否有任何方法可以更改行为(例如连接字符串参数)?在这两种情况下,我是否可以处理其他事件以获得通知

提示:从SQL日志中,我可以确认在这两种情况下(在prem和Azure上)事务都已升级,但是(令我惊讶的是)在SQL Azure数据库中没有涉及MSDTC服务