0

我正在使用继承 System.Servicemodel.Channels.Message 的自定义消息。
我的自定义消息获取从数据库中提取的 IEnumerable 集合。
WCF 服务是事务性的(已经过测试)。

MS-DTC 已启用。

问题是,当在自定义消息处执行受保护的覆盖 void OnWriteBodyContents(XmlDictionaryWriter writer)方法时,没有事务。
System.Transactions.Transaction.Current 为空。在执行服务时,事务流工作正常,但是当消息由 WCF 机制写入时,似乎它超出了事务,导致 DB 命令(拉数据)在没有事务的情况下执行。
请注意,如果我传递的是简单数组而不是 IEnumerable,则 DB 操作将在事务下执行,但我希望它与响应写入并行执行。

请有任何想法,为什么交易丢失以及可以做些什么来激活它?

非常感谢!
塔米尔。

4

1 回答 1

1

事务通常附加到您当前的线程或调用上下文。因此,如果您在不同的线程上启动事务并且消息序列化正在另一个线程上发生,那么该线程上的事务将不可用。您应该查看 TransactionScope 和DependentTransaction以支持此类场景。

于 2010-08-25T09:30:56.097 回答