Миграция данных при публикации проекта ASP.NET Core 3.1 на сервере IIS
День добрый! Помогите пожалуйста разобраться с вопросом запуска приложения asp.net core 3.1 на сервере iis. Собственно вопрос: каким образом необходимо создавать и подключать БД на сервере при публикации проекта? Файлы проекта публикую в папку inetpub/wwwwroot/[название проекта]. Устанавливаю MSSQL Server Management Studio 18. В ней создаю БД с названием, аналогичным БД в моем рабочем проекте Visual Studio. Через VS копирую базу из моего проекта в MSSQL SMS. В Management Studio в результате создается пустая база со всеми необходимыми таблицами. Далее прописываю connectionStrings к БД.
"ConnectionStrings": {
"DefaultConnection": "Data Source=DESKTOP-7J81BBU\\SQLEXPRESS2017;Initial Catalog=EmployeeTesting;Integrated Security=True;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
"EmployeeTestingIdentity": "Data Source=DESKTOP-7J81BBU\\SQLEXPRESS2017;Initial Catalog=EmployeeTesting;Integrated Security=True;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
}
При запуске сайта в iis выдает ошибку:
HTTP Error 500.30 - ANCM In-Process Start Failure
Application '/LM/W3SVC/2/ROOT' with physical root 'C:\inetpub\wwwroot\EmplTest\' hit unexpected managed exception, exception code = '0xe0434352'. First 30KB characters of captured stdout and stderr logs:
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
CREATE DATABASE [EmployeeTesting];
Application startup exception: Microsoft.Data.SqlClient.SqlException (0x80131904): CREATE DATABASE permission denied in database 'master'.
Полностью ошибку цитировать не вижу смысла. В тексте ошибки есть еще моменты которые мне кажутся важными: присутствуют ссылки на строки к моему рабочему проекту указывающие на строки в файлах Startup и Program D:\MyProjects\Projects_New_ASP_NET_Core_MVC\EmployeeTesting\EmployeeTesting\Startup.cs:line 95 D:\MyProjects\Projects_New_ASP_NET_Core_MVC\EmployeeTesting\EmployeeTesting\Program.cs:line 19
если нужно код этих строк из проекта скину?! Заранее прошу прощения если задаю совсем глупые вопросы, никогда не работал ни с IIS ни с MSSQLSMS. Всегда использовал SQL LocalDB.
Ответы (1 шт):
Проблему разрешил таким способом:
- Во первых, нет необходимости предварительно создавать БД, в моем случае приложение создает ее само.
- Удалил ранее созданную вручную базу из MSSQL SMS.
- Необходимо в SMS в папке Security/Logins создать нового пользователя БД и назвать его IIS APPPOOL\[название вашего пулла]
- Далее зайти в созданного пользователя и в настройках, во кладке Server Roles, указать public и sysadmin
- Также в моем случае была измененна строка подключения:
"ConnectionStrings": {
"DefaultConnection": "Server=DESKTOP-7J81BBU\\SQLEXPRESS;Database=EmployeeTesting;Trusted_Connection=True;MultipleActiveResultSets=true",
"EmployeeTestingIdentity": "Server=DESKTOP-7J81BBU\\SQLEXPRESS;Database=EmployeeTesting;Trusted_Connection=True;MultipleActiveResultSets=true"
}
После этих действий можно запускать сайт в IIS сервере. Базы создаются автоматически и заполняются всеми необходимыми данными.