具有事务支持的 WCF 自定义消息编写
我正在使用继承 System.Servicemodel.Channels.Message 的自定义消息。
我的自定义消息获取从数据库中提取的 IEnumerable 集合。
WCF 服务是事务性的(已经过测试)。
MS-DTC 已启用。
问题是,当在自定义消息中执行 protected override void OnWriteBodyContents(XmlDictionaryWriter writer) 方法时,没有事务。
System.Transactions.Transaction.Current 为空。在执行服务时,事务流工作正常,但是当消息由 WCF 机制写入时,它似乎脱离了事务,导致(拉取数据的)数据库命令在没有事务的情况下执行。
请注意,如果我传递简单数组而不是 IEnumerable,则数据库操作将在事务下执行,但我希望它与响应写入并行执行。
请问有什么想法吗,为什么交易丢失以及可以做什么来激活它?
非常感谢!
塔米尔.
I'm using a custom message that inherits the System.Servicemodel.Channels.Message.
My custom message get IEnumerable collection which pulled from a database.
The WCF service is transactional (which is already tested).
MS-DTC is enabled.
Problem is, that when the protected override void OnWriteBodyContents(XmlDictionaryWriter writer) method is executed at the custom message, there is no transaction.
The System.Transactions.Transaction.Current is null. while executing the service the transaction flow is works fine, but when the message is written by WCF mechanism, it's seems like it's out of a transaction which cause the DB command (of pulling the data) to be executed without transaction.
Please note, that if I'm passing simple array instead of IEnumerable the DB action is executed under transaction, but I want it to be executed parallelly with the response writing.
Any ideas please, why the transaction is missing and what can be done to activate it?
many thanks!
Tamir.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
事务通常附加到当前线程或调用上下文。因此,如果您在不同的线程上启动事务,并且消息序列化发生在另一个线程上,则事务将在该线程上不可用。您应该查看 TransactionScope 和 DependentTransaction 以支持此类场景。
Transaction are generally attached to your current thread or calling context. So if you are initiating transaction on different thread and message serialization is happing on another thread then transaction won't be available on that thread. You should look at TransactionScope and DependentTransaction for supporting such scenarios.