<WebMethod(TransactionOption:=EnterpriseServices.TransactionOption.RequiresNew)> _
Public Function DTSTest() As String
Try
ContextUtil.EnableCommit()
DrawMoneyFromA(100)
DepostMoneyToB(100)
ContextUtil.SetComplete()
Return "OK!"
Catch ex As Exception
ContextUtil.SetAbort()
Return "Failed" + ex.Message
End Try
End Function
Public Sub DrawMoneyFromA(ByVal amount As Long)
'從 A 中提取一定的錢
Dim cnn As New SqlConnection("server=server1;database=A;uid=sa;pwd=Password@1;enlist=false")
cnn.Open()
Dim cmd As New SqlCommand("Update bank set amount=amount - " & amount & " where bankaccount='A'", cnn)
cmd.ExecuteNonQuery()
End Sub
Public Sub DepostMoneyToB(ByVal amount As Long)
'往 B 帳戶加入一定的錢
Dim cnn As New SqlConnection("server=server2;database=B;pwd=Password@1;uid=sa;enlist=false")
cnn.Open()
Dim cmd As New SqlCommand("Update bank set amount=amount + " & amount & " where bankaccount='B'", cnn)
Throw New Exception("ff")
cmd.ExecuteNonQuery()
End Sub
然後調用web service, 發現A 的餘額是 900, 而 B 的帳戶仍舊是 1000 ,分散式交易失敗。