我使用Deposit(amount)
和Withdraw(amount)
等方法实施WCF付款服务。我想保证,如果服务方法调用在客户端抛出异常(如果网络相关问题导致丢失或损坏的响应),则不会执行支付交易。
服务客户端是否应该生成分布式事务以进行单个方法调用?还是有更好的方法?
答案 0 :(得分:0)
使用netTcpBinding,支持网络上的DTC交易fairly trivial。您的客户端甚至不会意识到他们正在传播服务的事务,因为WCF堆栈隐藏了所有这些。
然而,在互联网上进行此操作是一个巨大的差异,您将被迫通过HTTPS公开您的服务并在您的端点上配置WS-Atomic Transaction支持。
如果您可以避免在互联网上暴露终端,那么这将更容易。
比这更好的解决方案IMO是为存款提供非交易终点,然后是客户可以请求他们刚刚存入的单独服务。
然后,如果客户找不到存款,客户可以再次致电存款操作。要支持此模型,您需要确保您的服务不能多次处理相同的存款。
另一种选择(虽然更详细)是在客户端公开“回调服务”,服务可以通过确认来调用。您需要以这种方式保证交付的单向呼叫的最小数量为3:
答案 1 :(得分:0)
拥有外部客户端时,他们可能无法访问DTC服务器。因此,在这种情况下,建议进行一次调用并在服务器上处理事务。