从事务范围调用WCF服务方法

时间:2012-11-01 13:02:06

标签: c# .net wcf transactions transactionscope

我的代码如下:

    using (TransactionScope scope = TransactionScopeFactory.CreateTransactionScope())
      {

        *// some methodes calls for which scope is needed*
        ...
        ...
        *//than WCF method code for which I don't want transaction to be involved, but if it throws  an exception I don't wish scope to be completed*
        WcfServiceInstance.SomeMethod();
        scope.Complete();
      }

我的问题是,我可以在Transaction范围内调用WCF服务方法而不会出现任何问题吗? (我不知道服务方法是如何实现的)另外,我想要确保Transaction不会涉及wcf服务方法调用。

2 个答案:

答案 0 :(得分:8)

WCF服务方法可以是事务性的,也可以不是事务性的,具体取决于它们的实现方式。如果要确保服务调用不参与事务,请将服务调用包装在“已禁止”的事务范围中。这将抑制任何环境事务。

using( new TransactionScope(TransactionScopeOption.Suppress) 
{
    WcfServiceInstance.SomeMethod()
}

答案 1 :(得分:4)

要从您的客户端应用程序传播一个事务,您需要明确选择serer和客户端上的事务流。如果您的客户端使用事务感知绑定(NetTcp, NetNamedPipe, WSHttp, WSDualHttp, & WSFederation),那么您应该看到一个布尔属性TransactionFlow。将此设置为false将阻止任何事务从您的客户端流向服务器。

您可以使用TransactionFlow属性对操作级别进行一些额外控制,但这是服务器端属性,因此如果您无权访问服务代码,则可能无法选择。< / p>

如果TransactionFlow属性无法解决您的问题,请告知我们。了解在客户端将此设置为false将阻止任何&amp;所有事务从客户端传递到该特定端点绑定的服务。