Отправка данных на SQL Server с помощью службы Windows
Требуется написать приложение, которое будет находится на сервере. Приложение должно обратиться к FTP, проверить есть ли там Json файл, если есть, то десериализовать его и отправить на SQL Server. Для реализации я решил выбрать службы Windows, чтобы программа постоянно работала и обращалась к FTP в момент, когда там появляется новый файл. Проблема в том, что я не могу отправить десериализованный объект в бд, хотя подключение правильное. Если это подключение реализовать в простом консольном приложении, то все отрабатывает отлично. А в службе ошибка
SqlException: Не удается открыть базу данных "userdb", запрашиваемую именем входа. Не удалось выполнить вход.
При входе в систему пользователя "WORKGROUP\DESKTOP" произошла ошибка.
ApplicationContext db = new ApplicationContext();
string jsonString = File.ReadAllText("путь к файлу");
OpenTrunk restoredPerson = JsonConvert.DeserializeObject<OpenTrunk>(jsonString);
db.OpenTrunks.Add(restoredPerson);
db.SaveChanges();
File.Delete("путь к файлу");
public class ApplicationContext : DbContext
{
public DbSet<OpenTrunk> OpenTrunks { get; set; }
public ApplicationContext() : base("DbConnection")
{
}
}
<connectionStrings>
<add name="DBConnection" connectionString="data source=.\;Database=EngineeringCalculator;Integrated Security=True;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Ответы (1 шт):
Все правильно. Подключение идет с авторизацией текущего пользователя, у вас сервис запускается под учеткой WORKGROUP\DESKTOP, которая, похоже, не имеет прав доступа к целевой БД.
Варианты решения:
- В настройках службы указываете пользователя под которым будет работать служба, затем данному пользователю предоставляете права доступа к БД;
- В строке подключения указываете пользователя и пароль, и подключаетесь с помощью аутентификации SQL;
- Дать права к БД пользователю
WORKGROUP\DESKTOPтоже можно, но мне этот способ не нравится - он будет работать только если служба и все ресурсы - папка FTP, БД - на одном компьютере.