System.Data.SqlClient.SqlException (0x80131904) - Сеть связана ... (только на локальном хосте) - PullRequest
0 голосов
/ 03 апреля 2019

Я впервые разрабатываю приложение в ASP.NET Core 2.1 с проверкой подлинности Windows.

Я работаю на своем компьютере разработчика с подключением к удаленному серверу, на котором размещен SQL Server.база данных для этого приложения.

Строка подключения задается в файле appsettings.json следующим образом:

"DefaultConnection": "Server=V-APPSRV01;Database=devHub;Integrated Security=True;Trusted_Connection=True;MultipleActiveResultSets=true"

У меня не было проблем при работе с приложением, с подключениями, CRUD илив противном случае во время разработки.

При развертывании версии выпуска на сервере, на котором размещены как сервер IIS, так и сервер SQL (аналогично тому, который использовался во время разработки), я получаю эту ошибку:

System.Data.SqlClient.SqlException (0x80131904): при установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть подключение к SQL Server) ---> System.ComponentModel.Win32Exception (53): сетевой путь не найден

Также,при подключении к SQL Server (с SSMS) я могу подключиться с любого компьютера в сети, а также локально.

Сайт работает, но когда я выполняю EnsureCreated(), он выдаетошибка, и, конечно, везде, где я пытаюсь CRUD-данные, он делает то же самое.

Сервер - это Windows Server 2018 R2 SP1 с IIS 7.5 и SQL Server 2012 (v11.0.2218.0).

Локальный компьютер разработчика - это Windows 10, работающая под управлением IIS Express.

Я следовал Документам Microsoft , чтобы настроить аутентификацию для приложения.

А также статья о настройке строк подключения.

Кроме того, я прочитал и выполнил рекомендации по этой статье .

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<PEXContext>();
                context.Database.EnsureCreated();
            }
            catch(Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An Error occurred creating the DB.");
            }
        }

        host.Run();
        // CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>();
}

Кажется, проблема связана с локальным подключением к базе данных.

Удаленно работает как задумано:

  • он подключается к базе данных с использованием аутентификации Windows
  • (заново) создает базу данных, когда она пуста
  • и выполняет CRUD для таблицы, созданной из его контроллера

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

...