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

公司的产品用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"));

你可能感兴趣的:(将WCF中的事务传播到Com+组件)