【问题标题】:Windows Azure Web Service, Fails to Connect to SQL DatabaseWindows Azure Web 服务,无法连接到 SQL 数据库
【发布时间】:2013-10-16 22:06:13
【问题描述】:

我已经为此工作了一段时间,但我不知道该怎么做。所以这就是问题所在。

我有一个 Azure Web 服务,可以在本地完美运行。它应该连接到 Azure SQL 数据库(我使用相同的 ConnectionString 进行调试和天蓝色.. 所以它应该是正确的)

使用 IntelliTrace,我发现以下错误:

Requested registry access is not allowed.
System.IO.FileNotFoundException Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=Neutral....
System.Data.Entity.Core.ProviderIncompatibleException
System.Data.SqlClient.SqlException    A network-related or instance-specific error occured while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct... (This about 50 times)
System.Threading.WaitHandleCannotBeOpenedException              No handle of the given name exists.
System.Security.SecurityException          Requested registry access is not allowed
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentException        error 
System.Threading.WaitHandleCannotBeOpenedException            No handle of the given name exists.

(异常堆栈,顶部最新,底部最旧)

在我的 web.config 中,我像这样设置 EF 和 ConnectionString:

<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="EntityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false"/>
</configSections>
<connectionStrings>
  <add name="DefaultConnection" connectionString="Server=SERVER.database.windows.net;Database=LeagueMetaDatabase;User ID=USER@ksew7pk8ad;Password=PW;Trusted_Connection=False;Encrypt=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>

我还为 EF 程序集停用了“特定版本”并激活了“复制本地”。 我检查了服务器上服务的bin文件夹,dll在那里。

该服务使用了很多异步,但如前所述,它可以在本地运行。我还在服务器上安装了 .NET 4.5.1 以确保这不是问题

// 编辑 首先,感谢到目前为止的所有帮助!

我尝试缩小问题范围。重新构建孔项目并尝试找出不起作用的地方。似乎异步任务无法读取 Azure 服务器云上 Web.config 中的 ConnectionString。在模拟器中,它可以工作。我将 ConnectionString 硬编码到 Context 中,它就是这样工作的。

谁能告诉我是什么造成了这种行为以及如何将其放回 Web.config 中?

【问题讨论】:

  • 如何部署到 Azure?如果您在 VS 中使用“发布”方法,那么您可能会检查是否设置了正确的连接字符串 - 我记得 Visual Studio 将连接字符串从开发替换为生产,您可以检查一下。此外,我不建议在 Azure 上使用任何不稳定的东西——我也遇到过很多问题(我看到你使用的是 EF 6)。
  • web.config 中的 标记中有什么?它引用了哪个 EF?
  • 我的服务的 web.config 中没有运行时标签
  • 我正在使用 VS 2013 RC 发布,我检查了服务器上的 web.config,它没有更改连接字符串

标签: c# sql sql-server entity-framework azure


【解决方案1】:

您的解决方案如何部署到 Azure?您使用的是云服务还是网站?如果您正在运行 Azure 网站,则问题可能与 web.config 和 Azure 网站中的连接字符串名称相同。如果是这种情况,您可能想尝试重命名 Azure 管理门户中为您的网站定义的连接字符串。这可以通过配置管理页面来完成。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    数据库和云服务是否在同一个数据中心?如果没有,请通过 Azure 控制面板链接您的资源和/或确保您已在 DB 配置部分启用“允许 Azure 服务连接”。

    另外,请确保您的 SERVER 连接指定“tcp” - Windows Azure SQL 数据库服务仅适用于 TCP 端口 1433。要从您的计算机访问 SQL 数据库数据库,请确保您的防火墙允许 TCP 端口上的传出 TCP 通信1433(来自Guidelines for Connecting to Windows Azure SQL Database)。如果您从 DB 仪表板页面获取 ADO 连接字符串,您应该会看到:

    Server=tcp:{your_servername}.database.windows.net,1433;Database={your_database_name};User ID={your_userid};Password={your_password_here};Trusted_Connection=False;Encrypt=True;Connection Timeout=30;
    

    【讨论】:

    • 是的,他们在同一个中心!链接 em 实际上只是将 em 链接到仪表板.. 它不会改变其他任何东西!
    • @AlexejHaak 我认为“它不会改变其他任何东西!”也 - 但我和你一样,错了。如果您转到 Web 服务上的配置选项卡,您将看到数据库和服务器的连接信息(我目前只设置了一个移动服务 - 但我遇到了您所描述的问题)。我发现确实需要正确设置这些值(通过链接资源)才能使我的数据库连接正常运行。这对我来说也是一个惊喜。这些值似乎会自动转换为您的配置文件...
    【解决方案3】:

    首先,感谢到目前为止的所有帮助!

    我尝试缩小问题范围。重建孔项目并尝试找出不起作用的地方。 似乎异步任务无法读取 Azure 服务器云上 Web.config 中的 ConnectionString。在模拟器中,它可以工作。我将 ConnectionString 硬编码到 Context 中,它就是这样工作的。

    谁能告诉我是什么造成了这种行为以及如何将其放回 Web.config 中?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 2015-01-02
      • 2011-06-08
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多