我有一个WCF服务被称为事务的一部分。如何在不中止整个事务的情况下处理WCF中的FaultException?
如果该服务被调用两次(通常在调试过程中发生)我想要一个FaultException被服务抛出,但整个事务必须成功。
throw new FaultException("Duplicate action not allowed for " +
msgIn.ActionType, new FaultCode("DUPE_ACTION"));
因为我抛出一个FaultException事务将投票中止权利?
我正在考虑这样做(设置交易完成 - 然后抛出过错) - 但我甚至不知道这是否会起作用。它也有我不想担心的some complications。
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = false)]
public void MyMethod(...)
{
try
{
OperationContext.Current.SetTransactionComplete();
throw new FaultException("Duplicate action not allowed for " +
msgIn.ActionType, new FaultCode("DUPE_ACTION"));
}
catch
{
/* Do some error handling then */
throw;
}
}
一个显而易见的解决方案是用Success
参数返回一个信息 - 这是我本来 - 不过这是很糟糕的设计,因为它终究是一个错误,并都配有一个例外。
或者解决方案就像让我的客户端抓住故障并继续进行交易一样简单。我担心投票已经发生。
允许WCF服务抛出错误但仍允许事务成功的最佳方式是什么?
您的服务是否需要参与交易?您可以创建一系列异常,例如Book/UnBook,以便客户端首先在您的服务上调用“Book”,然后如果客户端遇到任何其他问题并需要回滚,那么部分回滚(或者您的报酬)将打电话给UnBook的服务? – 2010-01-03 22:31:18