辅助角色不会连接到SQL Azure

时间:2013-09-11 18:39:50

标签: azure azure-sql-database azure-worker-roles

我正在研究使用云服务的典型Web应用程序,以了解如何使用windows azure。在我的部署中,我有两个角色,一个运行ASP.NET MVC应用程序的Web角色,以及一个提供一些后端服务的辅助角色。

数据库托管在SQL Azure上(在相同的订阅和数据中心中),并使用Entity Framework Code First进行管理。连接字符串是Azure提供的。

奇怪的是,在Web角色上,实体框架成功地连接和执行针对SQL Azure数据库的查询。但是当在Worker Role中运行相同的代码时,它会崩溃并出现以下异常:

  

System.Data.SqlClient.SqlException:与网络相关或   建立连接时发生特定于实例的错误   SQL Server。服务器未找到或无法访问。校验   实例名称正确且SQL Server配置为   允许远程连接。 (提供者:SQL网络接口,错误:26    - 找到指定的服务器/实例时出错

我验证了所使用的连接字符串是相同的,但是在确定Worker Role无法连接的原因方面没有成功。

编辑:使用Compute Emulator和SQL Azure连接字符串(已配置正确的防火墙例外)执行该角色,代码未崩溃。显然,只有当代码在云中运行时才会发生。

编辑2 :SQL Azure防火墙已正确配置为允许来自Azure数据中心的连接,如Web角色的成功连接所示。

3 个答案:

答案 0 :(得分:3)

我有这个问题。我的Web角色是从Web.config文件获取数据库连接字符串(因为XSLT转换工作正常)。实际上我将连接字符串的名称传递给我的上下文的构造函数,而不是连接字符串本身。

我的worker角色使用Azure的配置,使用RoleEnvironment.GetConfigurationSettingValue()获取连接字符串并将连接字符串本身传递到上下文的构造函数中。这在模拟器中针对生产数据库起作用,但不在Azure云本身中起作用。

我的解决方案是停止使用Azure配置,而是将连接字符串放入我的App.config中,并将连接字符串的名称传递给上下文的构造函数,就像我在Web角色中所做的那样。这解决了我的问题,并且工作者角色能够毫无问题地连接到数据库。

当然,App.config文件不能开箱即用,与Web.config文件不同(因为,嘿,谁需要那个?)所以我不得不遵循指示here以实现这一目标。

答案 1 :(得分:1)

检查您的不同云配置。 (在默认项目模板中,您可能有一个用于Local& One for Cloud)

如果您使用配置转换,请检查您的不同版本配置。即在App.Config / Web.Config下,您可能会看到App.Debug.Config / App.Release.Config。

验证您是否在发布模式下覆盖连接字符串。

答案 2 :(得分:0)

确保在Azure门户中的“配置”下,在“允许的服务”部分中,Windows Azure服务设置为= YES。这是Windows Azure服务的特殊防火墙规则(0.0.0.0)。启用此选项可让Windows Azure服务连接到SQL数据库。