我的代码如下:
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服务方法调用。
答案 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;所有事务从客户端传递到该特定端点绑定的服务。