分布式数据库事务

网友投稿 496 2023-04-04

分布式数据库事务

分布式数据库事务

如果我们想实现分布式数据库事务操作,那么在.NET Framework中可以依靠MTS/COM+服务来支持自动事务操作。COM+使用DTC(Microsoft Distribution Transaction Coordinator)作为事务管理器和事务协调器在分布式环境中运行事务,这样就可以使.NET来跨越多个资源进行操作了。具体做法如下:

首先新建一个“类库”项目,然后在这个项目中,我们自己的类继承ServicedComponent这个类,并将它的属性标记为“Transaction”(事务),代码如下:

[Transaction (TransactionOption.Required)]

public class MyDTC : ServicedComponent

然后我们就可以使用Enterprise Library提供的ContextUtil中的方法来实现多数据库操作的回滚。代码如下:

try

{

myconn1.Open();

Console.WriteLine("Connection1 is successful!");

mycmd1.CommandText = "spInsertMyInfo";

mycmd1.Parameters.Add("@id", 6);

mycmd1.Parameters.Add("@name", "Remy");

mycmd1.ExecuteNonQuery();

myconn2.Open();

Console.WriteLine("Connection2 is successful!");

mycmd2.CommandText = "spInsertValue";

mycmd2.Parameters.Add("@num", 11);

mycmd2.Parameters.Add("@systemtime", "2005-5-31");

mycmd2.Parameters.Add("@numtest", 19);

mycmd2.ExecuteNonQuery();

ContextUtil.SetComplete();

}

catch (Exception)

{

ContextUtil.SetAbort();

}

finally

{

myconn1.Dispose();

myconn2.Dispose();

}

最后要注意的是我们必须要对Assembly设置一些必须的属性以确保它能够被正确的注册为COM+服务,代码如下:

using System;

using System.Data;

using System.Data.SqlClient;

using System.EnterpriseServices;

using System.Reflection;

using System.Runtime.CompilerServices;

[assembly: ApplicationName("MyDTC")]

[assembly: AssemblyKeyFileAttribute("C:\\mydtc.snk")]

[assembly: ApplicationActivation(ActivationOption.Server)]

然后我们利用regsvcs xxx.dll将我们的组建注册为COM+服务,最后我们只要自己编写一个Client端来调用这个COM+服务就可以实现多数据库事务操作了。

以下是我查找到的一些相关资料:

“Serviced Component Overview”:

“Writing Serviced Components”:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:分布式数据库连接sp_addlinkedserver(2005)
下一篇:高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
相关文章