我在应用程序服务中拥有一个由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;
此本地数据库配置为允许远程服务器连接:
答案 0 :(得分:1)
此错误通常表示找不到SQL Server计算机,或者TCP端口号未知,不是正确的端口号或被防火墙阻止了。
您可以参考以下步骤来检查您的sql server连接。
1。收集有关SQL Server实例的信息。
2.启用协议。
3.测试TCP / IP连接。
4.测试本地连接。
5.在防火墙中打开端口。
6.测试连接
有关更多详细信息,您可以参考此article对连接到sql server数据库引擎进行故障排除。
此外,您可以尝试从下面的对象上下文中maunally open the connection和fixed error来某个人。
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}