BizTalk,通过 WS-AT 获取具有数据库事务的 Web 服务

BizTalk, enlist a web service with database transaction through WS-AT

我们对外暴露了一个BizTalk web service,web service再调用一个数据库,有时候数据库耗时比较长,web service超时了,数据又变了,这种情况下,调用者认为调用失败了,但是数据已经改变。 (例如客户账户已经扣款)

如何在这种情况下实现端到端事务,启用 WS-AT 事务是否有帮助?

您可以根据需要执行多项操作。

如果调用者只需要确认他们已成功发送他们的请求,您可以有一个编排立即给出 OK 响应,然后调用数据库。如果在此之后事务由于某种原因失败,您将不得不在内部发送失败消息,或者向调用方发送异步失败消息。

如果更新后需要同步响应,需要降低事务的延迟。找出是什么花了这么长时间。要查看 Web 服务启动的延迟、BizTalk 进程和数据库。通常您可以对这三者做一些事情来减少它们各自的延迟。这是一个很长的话题,所以我不会详细介绍。

增加网络服务上的time-out。这可能还需要调用者在他们的末端增加 time-out。

不,有人告诉我不可能以这种方式使用 WS-AT。 另见 BizTalk 2009 : WS-AtomicTransaction Support

The scope of the transaction is limited to a one-way receive port. When the receive location is bound to a request-response receive port, the Transactions section will be disabled. BizTalk will flow the WSAtomicTransaction request until the message has been committed to the Messagebox for processing. Read more at http://tutorial.wmlcloud.com/windows_server/BizTalk-2009---WS-AtomicTransaction-Support.aspx#r5LtZ6ou1xmtoSTd.99

WS-Atomic 请求响应端口禁用事务