用NetMSMQBinding在Transactionscope中拨打WCF停止交易
-
19-09-2019 - |
题
我有一个通过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)]
关于合同的实施(服务本身)。
工作。
不隶属于 StackOverflow