Azure Web App - строка подключения работает на локальном, но не на сервере [EntityException: базовый поставщик не удалось открыть] - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение 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;

И эта локальная база данных настроена для разрешения удаленных подключений к серверу:

enter image description here

1 Ответ

0 голосов
/ 09 июля 2018

Эта ошибка обычно означает, что компьютер SQL Server не может быть найден или номер порта TCP либо неизвестен, либо неверный номер порта, либо заблокирован брандмауэром.

Вы можете обратиться к этим шагам для проверки подключения к серверу sql.

1. Сбор информации об экземпляре SQL Server.
2. Включаемые протоколы.
3. Тестирование соединения TCP / IP.
4. Тестирование локального соединения.
5.Открытие порта в брандмауэре.
6. Тестирование соединения

Для получения более подробной информации вы можете обратиться к этой статье , чтобы устранить неполадки при подключении к ядру базы данных сервера sql.

Кроме того, кто-то может вручную открыть соединение из контекста объекта, как показано ниже, и исправлена ​​ошибка , вы можете попытаться.

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