2013-04-01 43 views
1

我已經成功地實施了一把umbraco 4.7到Windows Azure的網站和SQL Azure的,但有時我得到類似的錯誤這一個:部署一把umbraco到SQL Azure的

SQL helper exception in ExecuteScalar ---> System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) ---> 

看來,一把umbraco不管理的重試邏輯(sql azure瞬態錯誤處理)。有人知道在umbraco方面實施這種非創傷性方法嗎?

+0

請使用SQLAzure遷移向導工具將數據庫從你的服務器遷移到蔚藍的服務器,然後再更改連接字符串和的AppSettings(鍵= UmbracoDSN)在你一把umbraco – dennis

+0

我的webconfig已經做到了,我的網站運行良好。只有大約1%的時間出現這樣的錯誤。這是因爲SQL連接限制,服務被設計爲以這種方式工作,並且必須在數據訪問層上實施重試邏輯,以在第一次失敗時重試。 – amhed

+0

你好。我在過去遇到同樣的錯誤。我啓用了緩存,這減少了對數據庫的負載,修復了它。您是否嘗試啓用緩存來查看是否可以解決它? – csharpforevermore

回答

1

有沒有簡單的方法來解決這個問題,在Azure中使用Umbraco的用戶通常會遇到會話狀態問題,這些問題會導致連接問題,但正如您所說的,您只能捕獲1%,這意味着您正在拾取瞬時錯誤。您將有可能看到這裏

http://our.umbraco.org/forum/core/general/27179-SQL-Azure-connectivity-issues?p=1

討論的淨效應是,你必須拿一把umbraco代碼庫,並與它重試框架重建。這帶來了使用Umbraco並採取未來版本的嚴重開銷。你最好遊說Umbraco的核心團隊完成一個完整的重試框架並支持它。 (讓我們甚至不談安全問題;)

這可能不是你想聽到的,但它有效地滾動自己的數據層時間。

說了這麼多我去一看:;)(因爲這樣做從看着一把umbraco源雖然我感興趣的其他東西)

爲出發點,他們正在使用

微軟.ApplicationBlocks.Data

作爲鹼用於進行連接和執行SQL命令

從綜觀umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper

使用SH = Microsoft.ApplicationBlocks.Data.SqlHelper;

所以我的猜測是你需要更換這個塊。在互聯網上快速(髒)搜索你

http://www.sharpdeveloper.net/source/SqlHelper-Source-Code-cs.html

你可以反映出來的類,但是,以確保。

然後,您可以重新構建一個瞬態故障處理框架,然後您可以有效地降低潛在的作爲dll(着名的遺言)的變化。

但是你可以使用至少得到

(ReliableSqlConnection康恩=新ReliableSqlConnection(CONNSTRING,retryPolicy))

該類型的類,更可愛的東西很容易去。

http://msdn.microsoft.com/en-us/library/hh680899(v=pandp.50).aspx

如果我要做到這一點,這就是我就從開始,我會在這一水平猶豫。

我不確定這是否會覆蓋100%的連接集,因爲我不主動在umbraco代碼庫中工作,所以這是最好的猜測,但看看源代碼這是我將從頭開始,並改變,看起來是你最好的出發點。

HTHS,

詹姆斯

+0

謝謝@JamesKn。我們最終決定爲這個實現「放手」umbraco。我們在paltaform上遇到了很多問題:會話管理,重試邏輯,以及由於與Umbraco 6上的默認IoC容器不兼容導致我們無法升級到最新版本的事實讓我們有所選擇。無論哪種方式,如果他們出現,我會將您的答案書籤爲未來的任何實現。感謝真棒詳細的迴應! – amhed

+0

@祝你好運與實施。 ;) – JamesKn