Приложение .NET Core WebAPI подключается локально, но на сервере происходит сбой с ошибкой сетевых интерфейсов SQL: 26 Ошибка при поиске указанного сервера / экземпляра - PullRequest
1 голос
/ 26 сентября 2019

Я разрабатываю новое приложение и запускаю .NET Core.Все в порядке, пока я не разверну приложение на серверах (для постановки / тестирования).

Я написал некоторый пользовательский код, в котором я пытаюсь / ловлю и возвращаюсь с основных конечных точек WebAPI, чтобы я мог использовать Postman и видеть ошибкитам.Ошибка:

"Произошла ошибка, связанная с сетью или экземпляром, при установлении соединения с SQL Server. ... (поставщик: Сетевые интерфейсы SQL, ошибка: 26 - Ошибка при поиске указанного сервера / экземпляра)".

Я также заранее извиняюсь, потому что полученное сообщение об ошибке встречается крайне часто, но я пробовал многочисленные решения безрезультатно.

Это 9-й день исследований, и я могу 'ждать большеОбращение за помощью здесь - последнее обращение, и если это не решится в течение дня, я перейду к .NET Framework.Итак, вот несколько сценариев, которые у меня есть:

MACHINE1: компьютер DEV 1, Visual Studio 2017, SSMS 2016 MACHINE2: компьютер DEV 2, Visual Studio 2017, SSMS 2008 R2 DB_SERVER1: сервер SQL Server 2016 GoDaddy Plesk SERVER2:Хостинг общего сервера GoDaddy Plesk SERVER3: AWS LightSail Instance Windows Server 2016, SSMS 2016 установлен

Ошибка ТОЛЬКО возникает, когда SERVER2 или SERVER3 пытаются подключиться к DB_SERVER 1.

. Похоже, само .NET Coreработать, потому что конечная точка возвращает пользовательский код, который взрывается только в точке соединения с базой данных.Итак, в начале у меня были некоторые затруднения и я задавался вопросом, правильно ли был установлен .NET Core, или возникла проблема с версиями и т. Д.

Я полностью отключил брандмауэры;Я дал привилегии администратора пула приложений. Попытался использовать номер порта в строке подключения.

Я могу соединиться с DB_SERVER1 через SSMS, sqlcmd из MACHINE1, MACHINE2 и SERVER3 (не пробовал SERVER2, потому что это Plesk, поэтомуЯ подумал, что было бы проще опробовать вещи в приватном ящике)

Код также работает при подключении к DB_SERVER1 из MACHINE1 Visual Studio, локальному IIS MACHINE1.

Интересные дополнительные моменты:

При публикации приложения на сервере через FTP / IIS строка подключения ВСЕГДА одинакова, независимо от того, изменяю ли я строку подключения в appsettings.json.Он использует строку подключения моего dev machine1.Даже если я полностью удаляю его из любого места в проекте, несмотря ни на что, та же самая исходная строка подключения отображается в развернутом файле appsettings.json.Затем позже мне всегда приходится вручную изменять строки подключения на сервере, чтобы попробовать что-либо, что не имеет значения, потому что результат всегда такой же, как если бы строка подключения никогда не менялась.Результирующее сообщение об ошибке, безусловно, исходит из того, что строка подключения никогда не менялась

Есть ли здесь какое-то неясное кэширование?Из IIS, AWS, .net Core?

В DB_SERVER1 нет ничего плохого в том, что касается брандмауэра, портов и т. Д., Потому что, как я только что описал, я могу подключиться к нему с помощью нескольких путей, инструментов и самого кода ядра dotnet.

Что ещея пропускаю?

Я установил время выполнения ядра dotnet на SERVER3.Итак, приложение работает, оно бомбит соединение с базой данных.Он использует Entity Framework, и я сначала создаю базу данных моделей с помощью команд dotnet.Итак, может ли какой-либо отсутствующий компонент EF вызвать ошибку 26?

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

Я пыталсямногочисленные решения, вот три примера очень близких проблем к тому, что у меня есть.

sql, сетевые интерфейсы, ошибка 26 - указана ошибка при поиске сервера / экземпляра

.Net Core 2.0 с EF7, подключающимся к SQL Server Express.Ошибка: 26 - Ошибка определения местоположения сервера / экземпляра

.NET Core не может подключиться к удаленной базе данных SQL Server

и многие другие уже пробовали.

В appsettings.json

"DefaultConnection": "Server=xxx.xx.xxx.x;Database=dbname;Trusted_Connection=False;MultipleActiveResultSets=True;User ID=username;Password=password"

В startup.cs

            services.AddDbContext<ApplicationDbContext>(
                option => option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<IdentityUser, IdentityRole>(
                option =>
                {
                    option.Password.RequireDigit = false;
                    option.Password.RequiredLength = 6;
                    option.Password.RequireNonAlphanumeric = false;
                    option.Password.RequireUppercase = false;
                    option.Password.RequireLowercase = false;
                }).AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Проблема в том, что с вашим сервером Sql сначала откройте сервер Sql и подключитесь к удаленной проверке базы данных. Можете ли вы подключиться или нет, потому что в коде ошибки ясно сказано, что это проблема с подключением, если он не подключается, то вынеобходимо настроить свой sql-сервер, а также порт 1433 от брандмауэра.

0 голосов
/ 26 сентября 2019

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

Кроме того,посмотрите на скриншот, который я прилагаю, попробуйте изменить строку подключения здесь, прежде чем публиковать, и посмотрите, сможете ли вы подключиться к вашей базе данных enter image description here

...