Олицетворение в Crystal Reports
Я пытался обновить проект WCF, который взаимодействует с Crystal Reports, чтобы он мог подключаться к MS SQL Server через проверку подлинности Windows. Это проект WCF, но он работает как служба Windows, а не через IIS.
Я использую https://github.com/mj1856/SimpleImpersonation, чтобы сделать шаг олицетворения. По сути, если во входящем запросе SOAP указаны правильные значения, включая IntegratedSecurity=true, он олицетворяет другого пользователя и пытается войти в систему с помощью IntegratedSecurity.
Мой код выглядит примерно так:
using (Impersonation.LogonUser(domain, username, password, LogonType.NewCredentials)) {
reportDocument.Execute();
}
Я знаю, что подражание работает, потому что я напечатал System.Security.Principal.WindowsIdentity.GetCurrent().Name
до и после using
заявление и увидел, что имя пользователя изменилось на то, что я хочу после using
,
Я пробовал каждый из разных LogonType
но я получаю те же результаты.
Я получаю Database logon failed
сообщение об ошибке от звонка Execute()
,Однако, если я запускаю веб-службу, работающую под учетной записью, которую я пытаюсь выдать, я могу правильно подключиться к базе данных.
Мои вопросы:
- Работает ли олицетворение так, как я намереваюсь? Я делаю что-то неправильно? (Не похоже, что это основано на документации)
- Есть ли в среде выполнения Crystal Reports для.NET что-то, что мне нужно настроить по-другому?
1 ответ
Оказывается, моя проблема была не с олицетворением, а с драйвером БД. Я нашел комментарий на https://archive.sap.com/discussions/thread/3621859:
Пожалуйста, проверьте, существует ли файл "sqlncli.dll" на сервере или нет? .. не уверен этот файл или какой-либо другой DLL.
Я установил https://www.microsoft.com/en-us/download/confirmation.aspx?id=50402 на сервер, и мой код начал работать автоматически.
Я хотел бы, чтобы сообщения об ошибках, возвращаемые Crystal Reports, были более наглядными, но, по крайней мере, это работает.