工人角色赢得';无法连接到SQL Azure

工人角色赢得';无法连接到SQL Azure,azure,azure-sql-database,azure-worker-roles,Azure,Azure Sql Database,Azure Worker Roles,我正在使用云服务开发一个典型的web应用程序,学习如何使用WindowsAzure。在我的部署中,我有两个角色,一个是运行ASP.NET MVC应用程序的web角色,另一个是提供一些后端服务的工作者角色 数据库托管在SQLAzure上(位于同一订阅和数据中心中),并首先使用实体框架代码进行管理。连接字符串是Azure提供的字符串 奇怪的是,在Web角色上,Entity Framework成功地连接并执行了针对SQL Azure数据库的查询。但是,当在辅助角色中运行相同的代码时,它会崩溃,出现以下

我正在使用云服务开发一个典型的web应用程序,学习如何使用WindowsAzure。在我的部署中,我有两个角色,一个是运行ASP.NET MVC应用程序的web角色,另一个是提供一些后端服务的工作者角色

数据库托管在SQLAzure上(位于同一订阅和数据中心中),并首先使用实体框架代码进行管理。连接字符串是Azure提供的字符串

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

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

我验证了所使用的连接字符串是相同的,但在确定工作者角色无法连接的原因时失败

编辑:使用Compute Emulator和SQL Azure连接字符串执行角色(已配置正确的防火墙异常),代码没有崩溃。所以很明显,只有当代码在云中运行时才会发生这种情况


编辑2:SQL Azure防火墙已正确配置为允许从Azure数据中心进行连接,Web角色的成功连接证明了这一点。

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

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

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

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


验证您在释放模式下没有覆盖连接字符串。

检查不同的云配置。(在默认项目模板中,可能有一个用于本地,一个用于云)

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


验证您没有在释放模式下覆盖连接字符串。

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

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

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


当然,App.config文件不能具有开箱即用的转换,这与Web.config文件不同(因为,嘿,谁需要它?),因此我必须按照说明进行转换。

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

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

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


当然,App.config文件不能具有开箱即用的转换,这与Web.config文件不同(因为,嘿,谁需要它?),因此我必须按照说明进行转换。

这确实是发生在meThis身上的事情,这确实是发生在我身上的事情