#sql-server #.net-core
#sql-сервер #.net-core
Вопрос:
Я пытаюсь портировать веб-api, который действует как интерфейс для базы данных SQL Server. Веб-api отлично работает в Windows, а при развертывании в IIS работает из .Net Core в Windows, но выдает ошибку подключения при запуске из OSX или Linux.
Строка подключения, которая работала из Visual Studio в Windows, была
connectionString="data source=AB;initial catalog=C;
persist security info=True;user id=X; password=Y;
MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient"
который затем преобразуется в строку подключения для .Вариант Net core как:
Server=AB;Database=C;user id=X;password=Y;
Проект отлично компилируется, даже работает под .Net core в Windows, но вылетает при запуске с * nix-компьютера.
Ошибка:
Unhandled Exception: System.Data.SqlClient.SqlException:
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: 35 - An internal exception was caught) --->
System.AggregateException: One or more errors occurred. (No such device
or address) --->
System.Net.Internals.SocketExceptionFactory ExtendedSocketException: No
such device or address
Я могу пропинговать адрес, но я предполагаю, что комбинация действительного адреса (A) и экземпляра сервера (B) не работает с простой косой чертой под *nix .
Комментарии:
1. Вы говорите, что происходит сбой. Что на самом деле происходит? Может ли ваш mac разрешить имя A, чтобы указать на нужную машину?
2. Я обновил вопрос с лучшим описанием. В любом случае, моя машина действительно может пинговать A, поэтому ошибка, вероятно, является комбинацией A B, которая должна быть задана каким-либо другим способом?
3.Что такое
A
? IP-адрес, полное доменное имя, имя сервера? Можете ли вы подключиться к серверу с помощью любого другого инструмента? То, что вы можете пинговать адрес, не означает, что вы можете подключиться к именованному экземпляру.
Ответ №1:
Сервер = A B; База данных = C; идентификатор пользователя = X; пароль = Y;
говорит, что вы обращаетесь к экземпляру B на компьютере с Windows, имя Netbios которого равно A. Вероятно, компьютер с Windows, на котором он работал, был самим «A».
Однако для удаленного подключения есть вещи, которые вы должны были сделать:
- Экземпляр SQL Server должен быть настроен на разрешение удаленных подключений.
- Порт, который прослушивает SQL server, должен быть включен для доступа через брандмауэр.
- Вместо имени Netbios лучше использовать IP-адрес вместе с номером порта, если это не порт по умолчанию (1433).
Вы можете начать пробовать (где 1.2.3.4 — IP-адрес компьютера с Windows):
1.2.3.4B;Database=C;uid=X;pwd=Y
Для подробной установки и настройки SQL Express на главном компьютере, включения удаленного доступа и последующего доступа с удаленного компьютера, вы можете посмотреть мой короткий видеоряд. Эти видеоролики были посвящены установке моего приложения, но большая часть из них содержит установку MS SQL server и доступ из удаленного местоположения. Это серия из 4 частей, и вот ссылка на первую часть:
Комментарии:
1. Проблема заключалась в том, что клиент Linux не был внесен в белый список и, следовательно, не мог получить доступ к компьютеру SQL Server, тогда как клиент Windows был внесен в белый список, и, следовательно, тот же код просто работал, как ожидалось.
2. @GiuseppeMaggiore — Я думаю, что то, что вы сказали, имеет смысл, у меня такая же проблема при доступе к sql server 2019 в контейнере с Mac, вы знаете, как решить эту проблему с белым списком?