2014-01-07 60 views
0

我正在使用異步調用編寫WCF應用程序。這些調用正在執行一個存儲過程(這是事務[隔離])。使用事務的異步調用

當一個用戶的存儲過程運行並且另一些調用到達存儲過程時,會影響相同的數據庫表,會發生什麼情況?

我應該實現一個隊列還是WCF支持它?

+2

你想在這種情況下發生什麼?您可能會使用SP中的事務來獲取所需的行爲。 – Servy

+0

@Servy - 這就是我所做的事務+ SP.I只是擔心在這個事務執行過程中到達的調用將不會執行。誰關心每個命令將被執行?是否有任何隊列在wcf中那還是我作爲程序員應該實現這樣的隊列? – Yakov

+1

如果您打電話,他們將不會被完全跳過。如果確實如此,這將是一個重大的bug。如果您正在使用交易,那麼您可以確定它們都會運行,並且會有*某些*交易的邏輯排序(儘管您不知道該訂單會提前發送什麼)。這是交易的*點*。 – Servy

回答

0

這是使用數據庫事務的全部要點。它們確保任何數據庫上的操作都是原子的

即使你沒有在.Net中進行異步調用,如果你有兩個應用程序同時訪問同一個數據庫,你希望每個應用程序的查詢都在數據庫事務的上下文中完成,他們發生孤立和獨立於另一個。

TransactionScope的.NET中的這個

using(TransactionScope tran = new TransactionScope()) { 
    CallAMethodThatDoesDBWork(); 

    tran.Complete(); 
} 

是巨大的,如果你的代碼中的錯誤,Dispose()方法將沒有完全()被調用,所以它會被回滾。