将WCF中的事务传播到Com+组件

本文讨论了如何在.NET环境下通过WCF实现与COM+组件的集成,重点介绍了在处理事务和跨线程通信时遇到的问题及解决方案。通过引入System.EnterpriseServices命名空间下的BYOT类,成功解决了在不同线程间使用.NET事务控制COM+组件的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司的产品用VB6开发了很多的Com+组件,代码维护到现在,重新用.net开发自然代价巨大。

话说有一个客户要求将此产品与另一系统进行集成,我们采用了WCF作为集成的方式,由我负责开发相关的WCF接口。

我的基本设想如下,由客户端发起调用,并启动客户端事务,服务端接收到客户端的调用后,如果存在客户端事务,就使用这个事务,不存在,就新建一个事务。

在代码中,我对数据进行了一番操作后,紧接着创建了一Com+对象,方式如下

dynamic doc= Activator.CreateInstance(Type.GetTypeFromProgID("DocCreate.Creater"));

然后,在客户端放弃提交事务之后,我发现单据还是导入了。这个COM+组件没有使用WCF中的环境事务,原因只是因为.net中的事务如果要跨线程传播,要使用依赖事务。

如果组件是.net开发的,我当然可以使用了,问题是这个Com+组件怎么使用.net创建的环境事务。Com+组件是在dllhost.exe程序中运行的,不在同一个线程中。

经过很长时间的寻找,才找到在System.EnterpriseServices命名空间下有个BYOT类,改成如下的调用方式,问题就解决了:

dynamic saver = BYOT.CreateWithTransaction(Transaction.Current, Type.GetTypeFromProgID("DocCreate.Creater"));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值