none
Проблемы с доступом к MS SQL Server 2017 Developer из приложения UWP

    Вопрос

  • На одном компьютере с Windows 10 и MS SQL Server 2017 Developer в среде Visual Studio разрабатывается приложение UWP. Оно без проблем подключается к серверу БД.

    Для тестирования этого приложения развернул MS SQL Server 2017 на другом компьютере с такой же версией Windows 10. Устанавливаю приложение, запускаю. Вылетает ошибка 40, невозможно найти SQL Server. Перепробовал все, что нашел в интернете (настройки брандмауэра, настройки SQL Server), приложение сервер не видит. При этом MS SQL Management Studio подключается к нему без проблем, тестирование подключения с помощью файла udl также проходит без проблем.

    Может кто-то сталкивался с такой проблемой?

    • Перемещено Vector BCO 10 октября 2018 г. 14:19 перенесено с technet
    10 октября 2018 г. 12:19

Ответы



  • На компьютере со средой разработки Visual Studio приложение UWP корректно подключается к localhost. Почему же оно не должно подключаться на другом компьютере? И если это так, то какой опцией в манифесте приложения разрешить ему это подключение?


    Потому что UWP не могут подключаться к locahost, запрещено это. А на компьютере с VS подключается потому что VS специально это разрешила.

    Никакой опцией манифеста это нельзя разрешить. Надо _на каждом_ компьютере разрешать это специальной утилитой, см. выше. Если это не вариант, то UWP видимо вам не подходит. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 октября 2018 г. 6:52
    Модератор
  • Вот здесь есть примеры, как из командной строки добавить приложение в исключения Network Isolation: 

    https://msdn.microsoft.com/en-us/library/windows/apps/hh780593.aspx

    "Просто супер. И почему об этом Microsoft не удосужилась написать например в примере кода подключения из приложения UWP к серверу MS SQL"

    Наверное, потому что подключение к localhost в основном предполагается использовать при отладке? Не часто на клиентских устройствах развертывается полноценный SQL Server. 

    16 октября 2018 г. 17:58

Все ответы

  • Покажите код, строку соединения и детали исключения.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    10 октября 2018 г. 15:23
    Модератор
  • Строка подключения:

            private string connectionString =
            //   @"Server=localhost; Database=TailoringFactory; Integrated Security=SSPI;";
            //    @"Data Source=(local);Initial Catalog=TailoringFactory;Integrated Security=SSPI;";
                @"Data Source=127.0.0.1;Initial Catalog=TailoringFactory;Integrated Security=SSPI;";

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

                // Создание таблицы ClothingKinds
                const string CreateClothingKindsQuery = "if not exists (select * from sysobjects where name='ClothingKinds' and xtype='U') "
                    + "create table ClothingKinds("
                    + "Code INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, "
                    + "Name NCHAR(40) NULL)";
                try
                {
                    using (SqlConnection conn = new SqlConnection(connectionString))
                    {
                        conn.Open();
                        if (conn.State == System.Data.ConnectionState.Open)
                        {
                            using (SqlCommand cmd = conn.CreateCommand())
                            {
                                cmd.CommandText = CreateClothingKindsQuery;
                                cmd.ExecuteReader();
                            }
                        }
                        conn.Close();
                    }
                }
                catch (Exception eSql)
                {
                    Debug.WriteLine("Exception: " + eSql.Message);
                    result = result + eSql.Message;
                }

    Код подключения к базе данных.

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

           

    11 октября 2018 г. 4:44
  • Простите, если в не в тему, но у кого, что болит, тот о том и говорит. Сейчас воюю с firewall, в рамках одной машины все работает, а по сети нет... Проверьте, системы блокировки доступа к серверу, может у Вас тоже с ними проблема...

    P.S. У Вас проблема с адресом сервера... LocalHost - 127.0.0.1, а по сети у сервера будет адрес не такой... В локалке обычно адреса 192.168.*.* для протокола IPv4.
    • Изменено Liliya Muray 11 октября 2018 г. 5:39
    11 октября 2018 г. 5:32
  • Это старая как мир ошибка - использовать localhost. Это ведь означает "хост, на котором запущена программа", но у вас ведь SQL запущен на другом компьютере.

    Используйте фактическое имя/адрес сервера в строке подключения. Тал же убедитесь что сервер сконфигурирован для удаленных подключений (запрещены по умолчанию).


    This posting is provided "AS IS" with no warranties, and confers no rights.

    11 октября 2018 г. 6:20
    Модератор
  • Видимо я непонятно написал в первом посте. Приложение запускается на том же компьютере, на котором и развернут SQL Server. Удаленные подключения к серверу разрешены, протокол TCP/IP также разрешен, настройки в брандмауэре прописаны. Все это было сделано сразу, но эффекта нет.

    Вот детали исключения:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Sever)

    14 октября 2018 г. 9:28
  • Сталкивался при разработке сайта нa ASP.NET. 

    На одном компьютере разрабатывался сайт с использованием MS SQL. Хотел продолжить на другом , скопировав проект , не получалось присоединиться к БД. Предположил что это из-за типа проверки подлинности при проверке соединения с сервером в SQL Management Studio. На обоих машинах был тип " Проверка подлинности Windows". Можно было поэкспериментировать установив тип с использованием пароля. Как я понимаю, в этом случае, БД должна быть доступна с разных устройств для разработчиков. 

    Но не проверял. Не особо актуально было. На втором компьютере VS2017 c неисправленным до сих пор багом - отсутствием возможности отладки JavaScript. На первом компьютере VS2012 for Web c работающим отладчиком JS в IE. Так что поработать на втором компьютере , все равно полноценно было нельзя. 

    В моем случае проекты разворачивались в среде VS. У Вас , как я понимаю, на второй машине развернулся уже построенный проект UWP .



    Фоновое изображение


    14 октября 2018 г. 15:44
  • Видимо я непонятно написал в первом посте. Приложение запускается на том же компьютере, на котором и развернут SQL Server. Удаленные подключения к серверу разрешены, протокол TCP/IP также разрешен, настройки в брандмауэре прописаны. Все это было сделано сразу, но эффекта нет.

    Вот детали исключения:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Sever)

    То есть на втором ПК тоже установлен и правильно настроен SQL Server? Если так, то проверьте разрешено ли такое подключение (по умолчанию UWP не может подключаться к localhost):

    https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/deploying-and-debugging-uwp-apps

    Это можно так же сделать инструментом CheckNetIsolation.exe



    This posting is provided "AS IS" with no warranties, and confers no rights.

    14 октября 2018 г. 16:55
    Модератор
  • То есть на втором ПК тоже установлен и правильно настроен SQL Server? Если так, то проверьте разрешено ли такое подключение (по умолчанию UWP не может подключаться к localhost):

    https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/deploying-and-debugging-uwp-apps

    Это можно так же сделать инструментом CheckNetIsolation.exe

    Да, на втором компьютере тоже установлен и правильно настроен SQL Server.

    Не понял, чем мне может помочь приведенная по ссылке статья. Чтобы было понятнее, я не ставлю приложение удаленно из среды Visual Studio. Я создаю пакет через меню "Проект - Магазин - Создать пакеты приложения...", копирую его на другой компьютер и затем устанавливаю приложение на другом компьютере запустив из PowerShell скрипт на выполнение. Установка проходит корректно, без ошибок.

    В манифесте проекта UWP выбрано "Интернет (клиент)" и "Корпоративная проверка подлинности".

    На компьютере со средой разработки Visual Studio приложение UWP корректно подключается к localhost. Почему же оно не должно подключаться на другом компьютере? И если это так, то какой опцией в манифесте приложения разрешить ему это подключение?


    15 октября 2018 г. 4:53
  • Не понял, чем мне может помочь приведенная по ссылке статья. Чтобы было понятнее, я не ставлю приложение удаленно из среды Visual Studio. Я создаю пакет через меню "Проект - Магазин - Создать пакеты приложения...", копирую его на другой компьютер и затем устанавливаю приложение на другом компьютере запустив из PowerShell скрипт на выполнение. Установка проходит корректно, без ошибок.
    Как вариант воспользоваться параметром "Удаленный компьютер", что позволит прямо из студии посмотреть на все переменные и расширенные сообщения об ошибке на компьютере исполнения. Во первых вы видите во время отладки всю картину, а во вторых упрощает развертывание новой версии приложения на удаленный компьютер, что позволит оперативней найти глюк.
    15 октября 2018 г. 5:25


  • На компьютере со средой разработки Visual Studio приложение UWP корректно подключается к localhost. Почему же оно не должно подключаться на другом компьютере? И если это так, то какой опцией в манифесте приложения разрешить ему это подключение?


    Потому что UWP не могут подключаться к locahost, запрещено это. А на компьютере с VS подключается потому что VS специально это разрешила.

    Никакой опцией манифеста это нельзя разрешить. Надо _на каждом_ компьютере разрешать это специальной утилитой, см. выше. Если это не вариант, то UWP видимо вам не подходит. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 октября 2018 г. 6:52
    Модератор
  • Потому что UWP не могут подключаться к locahost, запрещено это. А на компьютере с VS подключается потому что VS специально это разрешила.

    Никакой опцией манифеста это нельзя разрешить. Надо _на каждом_ компьютере разрешать это специальной утилитой, см. выше. Если это не вариант, то UWP видимо вам не подходит. 


    Просто супер. И почему об этом Microsoft не удосужилась написать например в примере кода подключения из приложения UWP к серверу MS SQL? Придется значит разрешать специальной утилитой, так как переделывать сейчас приложение под WPF смысла не имеет, уже столько кода написано. А возможно сделать какой-нибудь скрипт или что-то подобное, чтобы приложение при установке само получало доступ к localhost?

    А не можете подсказать как утилитой CheckNetIsolation разрешить доступ приложениям UWP к localhost?


    15 октября 2018 г. 8:05
  • Потому что UWP не могут подключаться к locahost, запрещено это. А на компьютере с VS подключается потому что VS специально это разрешила.
    А пункт манифеста UWP приложения "Частные сети (клиент и сервер)" - разве не из этой оперы? Он для чего предназначен?
    15 октября 2018 г. 8:24
  • А пункт манифеста UWP приложения "Частные сети (клиент и сервер)" - разве не из этой оперы? Он для чего предназначен?
    Этот пункт проблему с доступом к localhost не решает, проверил.
    16 октября 2018 г. 14:59
  • Вот здесь есть примеры, как из командной строки добавить приложение в исключения Network Isolation: 

    https://msdn.microsoft.com/en-us/library/windows/apps/hh780593.aspx

    "Просто супер. И почему об этом Microsoft не удосужилась написать например в примере кода подключения из приложения UWP к серверу MS SQL"

    Наверное, потому что подключение к localhost в основном предполагается использовать при отладке? Не часто на клиентских устройствах развертывается полноценный SQL Server. 

    16 октября 2018 г. 17:58