【问题标题】:Deploying Umbraco to SQL Azure将 Umbraco 部署到 SQL Azure
【发布时间】:2013-05-11 07:40:03
【问题描述】:

我已成功将 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 方面实现这一点的任何非创伤性方法?

【问题讨论】:

  • 请使用 SQLAzure 迁移向导工具将数据库从您的服务器迁移到 azure 服务器,然后在您的 umbraco 的 webconfig 中更改连接字符串和 appsettings(key=UmbracoDSN)
  • 我已经这样做了,我的网站运行良好。只有大约 1% 的时间我会收到这样的错误。这是因为 SQL Connection Throttling,服务被设计为以这种方式工作,并且必须在数据访问层上实现重试逻辑,以便在第一个失败时重试。
  • 你好。我过去遇到过同样的错误。我启用了缓存,这减少了数据库的负载,从而修复了它。您是否尝试过启用缓存以查看是否可以解决问题?
  • 你在使用 SQL 会话状态管理吗?还是您使用的是 AppFabric 缓存?
  • 它实际上是在使用 InProc,因为我只有一个服务器实例在运行,所以没有更改它

标签: azure umbraco azure-sql-database


【解决方案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,

詹姆斯

【讨论】:

  • 谢谢@JamesKn。我们最终决定为这个实现“放手”umbraco。我们在使用 paltaform 时遇到了很多问题:会话管理、重试逻辑以及由于与 Umbraco 6 上的默认 IoC 容器不兼容而无法升级到最新版本的事实让我们做出了选择。无论哪种方式,如果将来出现任何实现,我都会为您的答案添加书签。感谢您的精彩详细回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
相关资源
最近更新 更多