Как мне правильно добавить строку подключения к SQL Server в качестве переменной среды systemd для asp.net ядро?

#c# #asp.net-core #systemd

#c# #asp.net-core #systemd

Вопрос:

Итак, у меня возникла эта проблема, когда у меня ASP.NET Основное приложение, которое, кажется, работает нормально, когда просто выполняет dotnet program.dll

Он считывает значения, которые должен, из appsettings.json Однако по очевидным причинам это невозможно в производственной среде, где несколько таких служб должны выполняться параллельно, каждая со своим собственным файлом systemd *.service. Таким образом; переменные окружения.

Я следовал инструкциям здесь здесь которые четко показывают, что строка подключения должна быть помещена как:

 Environment=SQLCONNSTR_key={escaped connstring}
  

Моя процедура для этого заключается в следующем:

  1. Экранируйте строку подключения:

connstr=$(systemd-escape 'Server=tcp:something.database.windows.net,1433;Initial Catalog=some-database;Persist Security Info=False;User ID=some_database_user;Password=$pec!al#OfCh@rs;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;')

  1. скопируйте значение echo $connstr в Environment=SQLCONNSTR_SqlServer={right-here-no-brackets}

  2. запустите службу: sudo systemctl start <servicename>

но с этим сообщением происходит сбой:

Failed to start bygbook-test.service: Unit bygbook-test.service is not loaded properly: Invalid argument.
See system logs and 'systemctl status bygbook-test.service' for details.

когда я проверяю журнал: sudo journalctl -u <servicename> я замечаю это исключение:

Unhandled Exception: System.ArgumentException: Keyword not supported: ''server'.

Честно говоря, я понятия не имею, что здесь происходит не так, я делаю это не так, как это должно быть сделано? я что-то забыл?

Комментарии:

1. Возможно, указан неправильный номер порта. Возможно, у вас более одного экземпляра базы данных, использующего разные номера портов. Попробуйте из cmd.exe > Netstat -a и посмотреть, прослушивает ли сервер порт 1433.

2. Я не знаком с netstat (знаю, что он существует, но я никогда не использовал его раньше) Однако порт должен быть открыт, поскольку это azure Sqlaas с открытым IP сервера, на котором запущено приложение. Как я уже говорил, она работает просто отлично, если я запускаю ее с dotnet <name>.dll

3. Какой номер порта????? «ДОЛЖЕН» — не очень хорошее предположение. Давайте докажем, что она открыта. Netstat должен предоставить больше информации.

4. Если я могу использовать программу, то при запуске ее напрямую, а не через службу, порт открыт. Таким образом, доказано, netstat это или нет. Есть доступ к базе данных. Но что-то не так с файлом systemd service.

5. кстати, это был номер порта 1433 (стандартный для (MS) Sql Server