我已成功将Umbraco 4.7实施到Windows Azure网站和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 transient fault handling)。有没有人知道在umbraco方面实现这一点的任何非创伤方式?
答案 0 :(得分:1)
http://our.umbraco.org/forum/core/general/27179-SQL-Azure-connectivity-issues?p=1
实际效果是您必须使用umbraco代码库并使用其中的重试框架重建它。这对于使用Umbraco和未来版本带来了严重的开销。你最好游说Umbraco核心团队建立一个完整的重试框架并支持它。 (甚至不要谈论安全问题;)
这可能不是你想要听到的,但实际上是滚动你自己的数据层时间。
说完所有我去看了之后:;)(因为这确实让我感兴趣的是其他东西)
作为起点,通过查看Umbraco中的来源,他们正在使用
Microsoft.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 conn = new ReliableSqlConnection(connString,retryPolicy))
轻松进入那种类型和更可爱的东西。
http://msdn.microsoft.com/en-us/library/hh680899(v=pandp.50).aspx
如果我打算这样做,这就是我从哪里开始的,我会进入那个级别。
我不确定这是否会覆盖100%的连接集,因为我在umbraco代码库中没有积极工作所以这是最好的猜测但是看看源代码这是我会从开始并改变并看起来是你的最好的起点。
HTHS,
詹姆斯