我正在开发一个使用云服务的典型 Web 应用程序来学习如何使用 Windows azure。在我的部署中,我有两个角色,一个是运行 ASP.NET MVC 应用程序的 Web 角色,另一个是提供一些后端服务的辅助角色。
该数据库托管在 SQL Azure 上(在同一订阅和数据中心中),并使用 Entity Framework Code First 进行管理。连接字符串是 Azure 提供的。
奇怪的是,在 Web Role 上,Entity Framework 成功地连接和执行了对 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 角色的成功连接证明了这一点。