Azure Web App-连接字符串在本地但不在服务器上起作用[EntityException:基础提供程序在打开时失败]

时间:2018-07-05 19:53:09

标签: asp.net-mvc azure web-applications deployment task

我在应用程序服务中拥有一个由Azure托管的ASP.NET Framework 4.6.1应用程序。使用Visual Studio的发布工具部署应用程序后,我面临一个非常奇怪的问题。

我正在使用Entity Framework库,该库使我可以从数据库中检索数据。尝试从任务中检索结果时,如下所示:

Task<List<service_req>> serviceRequestsTask = context.service_req.SqlQuery("SELECT * FROM (SELECT ROW_NUMBER() OVER( ORDER BY id ASC) AS RowNum, * FROM [legroupetihd].[dbo].[service_req] WHERE 1 = 1) AS RowNum WHERE RowNum >= 1 AND  RowNum < 20", "service_req").ToListAsync();
//This line is causing an error 404 in production
List<service_req> serviceRequests = serviceRequestsTask.Result;

我在服务器端看到一个错误404页面,但是所有内容都可以在本地找到。

如果我删除此行:

//This line is causing an error 404 in production
List<service_req> serviceRequests = serviceRequestsTask.Result; 

然后404错误消失,我可以访问页面,但是我需要这些数据。

System.Threading.Tasks是否有可能;服务器丢失了吗? 这行有什么问题吗?

任何帮助将不胜感激。

更新1

事实证明,错误404隐藏了另一个错误:

  

Win32Exception:远程计算机拒绝网络连接   未知位置

     

SqlException:发生了与网络相关或特定于实例的错误   建立与SQL Server的连接时。服务器不是   找到或无法访问。验证实例名称正确   并且该SQL Server配置为允许远程连接。   (提供者:TCP Provider,错误:0-远程计算机拒绝了   网络连接。)   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity   身份,SqlConnectionString connectionOptions,SqlCredential   凭证,对象providerInfo,字符串newPassword,SecureString   newSecurePassword,布尔重定向用户实例,SqlConnectionString   userConnectionOptions,SessionData reconnectSessionData,   DbConnectionPool池,字符串accessToken,布尔   applyTransientFaultHandling)

     

EntityException:基础提供程序在打开时失败。   System.Data.Entity.Core.EntityClient.EntityConnection.Open()

它似乎与实体框架连接字符串链接。我花了几个小时解决这个错误,但无法弄清楚为什么它不能在服务器端(这是一个Azure Web App)上运行。

这是我的连接字符串,其中包括设置为true的MultipleActiveResultSets。

Data Source="DATABASENAME, PORT";Initial Catalog=legroupetihd;Integrated Security=False;User Id=ID;Password=PASSWORD;MultipleActiveResultSets=True;

此本地数据库配置为允许远程服务器连接:

enter image description here

1 个答案:

答案 0 :(得分:1)

此错误通常表示找不到SQL Server计算机,或者TCP端口号未知,不是正确的端口号或被防火墙阻止了。

您可以参考以下步骤来检查您的sql server连接。

  

1。收集有关SQL Server实例的信息。
  2.启用协议。
  3.测试TCP / IP连接。
  4.测试本地连接。
  5.在防火墙中打开端口。
  6.测试连接

有关更多详细信息,您可以参考此article对连接到sql server数据库引擎进行故障排除。

此外,您可以尝试从下面的对象上下文中maunally open the connectionfixed error来某个人。

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}