我有一个 WCF 服务作为事务的一部分被调用。
如果服务被调用两次(通常在调试期间发生),我希望服务抛出一个 FaultException 但整个事务必须成功。
throw new FaultException("Duplicate action not allowed for " +
msgIn.ActionType, new FaultCode("DUPE_ACTION"));
由于我抛出一个 FaultException 事务将投票中止,对吗?
我正在考虑这样做(设置事务完成 - 然后抛出错误) - 但我什至不知道这是否可行。它也有一些我不想担心的并发症。
[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 服务抛出错误但仍允许事务成功的最佳方法是什么?