惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
Spread Privacy
Spread Privacy
I
InfoQ
V
V2EX
S
Schneier on Security
小众软件
小众软件
C
CERT Recently Published Vulnerability Notes
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
L
Lohrmann on Cybersecurity
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Attack and Defense Labs
Attack and Defense Labs
云风的 BLOG
云风的 BLOG
The Hacker News
The Hacker News
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
Latest news
Latest news
S
Secure Thoughts
Project Zero
Project Zero
MongoDB | Blog
MongoDB | Blog
I
Intezer
Security Latest
Security Latest
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
N
Netflix TechBlog - Medium
V2EX - 技术
V2EX - 技术
量子位
T
Threatpost
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
T
Tor Project blog
A
Arctic Wolf
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Check Point Blog
博客园 - Franky
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
L
LINUX DO - 热门话题

博客园 - 馒头

加载安卓SDK失败的办法 WCF服务端配置容易被忽略的细节问题 对 wcf 的安全机制传输安全的疑惑求教 [转].net下跨数据分布式事务的处理办法TransactionScope [转]Page的生存周期 [转]如何获得动态添加的html控件的值 - 馒头 - 博客园 如何在客户端清除fileUpLoad控件的文件路径 - 馒头 - 博客园 来自朋友的关爱 T_Sql之Str()和Cast .net word编程对象简介 .Net将数据导出Word Oracle 与SQL Server 2000常用函数对照 [摘抄] 项目中除了需求外还需要知道的问题 .net调用数据库存储过程应当注意的问题 [转]Asp.Net下导出/导入规则的Excel(.xls)文件 [转]常用表达式 [转]ASP.NET提供文件下载函数 [转]项目的成败 如何向存储过程传送数组
[转].net试用分布式数据库事务com+
馒头 · 2009-02-26 · via 博客园 - 馒头

如果我们想实现分布式数据库事务操作,那么在.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”:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconservicedcomponentoverview.asp
“Writing Serviced Components”:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconwritingservicedcomponents.asp