我正在使用继承System.Servicemodel.Channels.Message的自定义消息。
我的自定义消息获取从数据库中提取的IEnumerable集合
WCF服务是事务性的(已经过测试)。
MS-DTC已启用。
问题是,当在自定义消息上执行受保护的覆盖void OnWriteBodyContents(XmlDictionaryWriter writer)方法时,没有事务。
System.Transactions.Transaction.Current为null。在执行服务时,事务流工作正常,但是当消息由WCF机制写入时,它似乎超出了一个事务,导致DB命令(拉动数据)在没有事务的情况下执行。
请注意,如果我传递简单数组而不是IEnumerable,则DB事件在事务下执行,但我希望它与响应写入并行执行。
请提出任何想法,为什么交易缺失以及如何激活它?
非常感谢!答案 0 :(得分:1)
事务通常附加到当前线程或调用上下文。因此,如果您在不同的线程上启动事务并且消息序列化正在另一个线程上,那么该线程上的事务将不可用。您应该查看TransactionScope和DependentTransaction以支持此类方案。