2012-09-02 69 views
2

在Windows Azure中,我們使用瞬態故障處理應用程序塊重試邏輯,該工作按照我們的工作角色預期工作。 但是,我們最近將SQL Azure數據庫升級爲聯邦數據庫,並從那時起經歷了一些問題。瞬態故障處理應用程序塊是否處理當前連接到聯合數據庫的連接?

我們的工作者角色偶爾會說特定的存儲過程不存在。這是存儲過程,我們在Run循環中檢查每一秒。角色循環遍歷每個分片並在每個分片數據庫上運行存儲過程。這一切都可以正常工作,但是偶爾我們會在日誌中發現錯誤,指出無法通過調用堆棧找到指示TransientFaultHandling連接重試的存儲過程。

由於我們的代碼只是創建一個連接(保持打開狀態)連接到一個分片然後執行存儲過程,所以我認爲候選人可能是因爲如果存在瞬時錯誤並且它重試連接,它可能最終結束連接回根數據庫,而不是用來連接的碎片?

我的問題是,TransientFaultHandling塊是否正確地解決了這個問題,並在重試連接時重新連接回正確的分片,如果不是這樣做的最佳做法?

感謝 加雷思

回答

0

我懷疑你是在正確的軌道上;連接可能重置爲根數據庫。據我所知,瞬態故障處理模塊會自動處理瞬態錯誤,但不能識別聯合。

我想知道你的代碼是如何構造的。但是這裏有一個想法(如果這不是你已經做的):你可以使用應用程序塊重試整段代碼,包括連接請求,USE命令(用於聯邦)和存儲的proc調用。所以如果失敗了,所有的東西都會被重試。你可以通過創建一個重試策略對象(這將是SQL數據庫瞬態檢測策略)並調用ExecuteAction方法來執行所有你想完成的工作。

希望這會有所幫助。

Herve

+0

謝謝。這就是我的想法,我現在按照你的建議去做。 – user1642187