我正在嘗試針對Azure SQL數據庫創建一個WCF事務,該數據庫證明迄今爲止尚未成功。 下面是一個例子:針對Azure SQL數據庫的WCF事務
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
try
{
ServiceReference1.Service1Client proxy1 = new ServiceReference1.Service1Client();
proxy1.UpdateData();
ServiceReference2.Service1Client proxy2 = new ServiceReference2.Service1Client();
proxy2.UpdateData();
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}
其中的UpdateData()實現是這樣的:
[OperationBehavior(TransactionScopeRequired = true)]
public void UpdateData()
{
SqlConnection objConnection = new SqlConnection(strConnection);
objConnection.Open();
SqlCommand objCommand = new SqlCommand("INSERT INTO[Security].[Tenants] VALUES(3, 'test', '2016-04-14 14:20:00", objConnection);
objCommand.ExecuteNonQuery();
objConnection.Close();
}
會發生什麼事是connection.Open()拋出一個異常: 對象引用未設置到實例在System.Transactions.Transaction.GetPromotedToken()
如果我嘗試執行此操作沒有事務範圍或在同一服務中的事務範圍它成功執行。只有當我嘗試在WCF事務中執行它時,纔會出現問題。
發佈完整的例外是一個很好的理念。您還應該爲SqlConnection和SqlCommand b/c實現使用語句,它們都實現了IDisposable。 – Wjdavis5
這是一個概念驗證測試項目。這就是爲什麼它缺少使用條款。 –