1

我已成功将 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 瞬态故障处理)。有没有人知道在 umbraco 方面实现这一点的任何非创伤性方法?

4

1 回答 1

1

Amhed,没有简单的方法可以做到这一点,在 Azure 中使用 Umbraco 的人通常会遇到导致连接问题的会话状态问题,但正如您所说,您只捕获了 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,

詹姆士

于 2013-05-10T23:40:03.370 回答