2

我有如下代码:

    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 服务方法而没有任何问题吗?(我不知道服务方法是如何实现的)另外,我想确保在wcf服务方法调用中不会涉及Transaction。

4

2 回答 2

8

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

using( new TransactionScope(TransactionScopeOption.Suppress) 
{
    WcfServiceInstance.SomeMethod()
}
于 2012-11-01T13:27:28.287 回答
4

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

您可以使用该属性对操作级别进行一些额外的控制TransactionFlow,但这是一个服务器端属性,因此如果您无权访问服务代码,这可能不是一个选项。

TransactionFlow如果该属性不能解决您的问题,请告诉我。了解在客户端上将此设置为 false 将阻止任何和所有事务从客户端传递到该特定端点绑定的服务。

于 2012-11-01T13:27:34.120 回答