У меня есть приложение ASP.NET Framework 4.6.1, размещенное в Azure в службе приложений. После развертывания приложения с помощью инструмента публикации 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, ошибка: 0 - удаленный компьютер отказался
подключение к сети.)
System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdentity
идентичность, SqlConnectionString connectionOptions, SqlCredential
учетные данные, объект providerInfo, строка newPassword, SecureString
newSecurePassword, bool redirectedUserInstance, SqlConnectionString
userConnectionOptions, SessionData reconnectSessionData,
DbConnectionPool pool, доступ к строке, токен, bool
applyTransientFaultHandling)
EntityException: базовый поставщик не удалось открыть.
System.Data.Entity.Core.EntityClient.EntityConnection.Open ()
Кажется, что он связан с Entity Framework и строкой соединения . Я потратил часы на эту ошибку и не могу понять, почему она не работает на стороне сервера (то есть в веб-приложении Azure).
Вот моя строка подключения, которая включает MultipleActiveResultSets, установленный в true.
Data Source="DATABASENAME, PORT";Initial Catalog=legroupetihd;Integrated Security=False;User Id=ID;Password=PASSWORD;MultipleActiveResultSets=True;
И эта локальная база данных настроена для разрешения удаленных подключений к серверу: