我有一个通过MSMQ运行的WCF记录服务。项目记录到SQL Server 2005数据库。如果在Transactionscope之外使用,则每个功能都正确。当在transactionscope实例中使用时,调用始终导致交易被中止。消息=“交易已中止”。

在交易中,我需要做什么才能使此通话工作?甚至有可能。我读到,对于客户交易以跨越服务边界的流动,绑定必须支持交易流,这立即将绑定限制为仅netnamedPipeBinding,NetTCPBINDING,WSHTTPBINDING,WSDUALHTTPBINDING和WSFEDERATIONHTTPBINDING。

有帮助吗?

解决方案

我对MSMQ并不了解,但是汤姆·霍兰德(Tom Hollander)有一个非常好的博客文章系列 MSMQ,IIS和WCF:让他们玩得很好 - 在第3部分中,这是汤姆(Tom)谈论进行交易的链接。

MSMQ可以是交易的。在WCF中,您可以使用与交易相关属性(例如是否允许,禁止或需要交易上下文)来装饰服务合同以及单个操作合同(方法)。

据我了解,在您的设置中,您不希望MSMQ部分是事务 - 但是即使存在环境交易,也应该能够使用它。在这种情况下,您需要将TransactionFlow =“允许”添加到您的操作合同中:

[ServiceContract]
public interface ILoggingService
{
  [OperationContract]
  [TransactionFlow(TransactionFlowOption.Allowed)]
  void LogData(......);
}

那应该做到!

马克

其他提示

抱歉,不必要的问题...

我解决了我的问题。我需要放置

[TransactionFlow(TransactionFlowOption.Allowed)]

在服务合同中的操作中,然后

[OperationBehavior(TransactionScopeRequired=true)] 

关于合同的实施(服务本身)。

工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top