Служба WCF Nhibernate с интегрированной безопасностью = истинная ошибка - PullRequest
0 голосов
/ 29 октября 2009

Я работаю над службой WCF (реализованной с помощью Fluent NH), и она работает как служба Windows.

Я использую консольное приложение для тестирования методов вызова.

Теперь, когда я устанавливаю строку подключения в hibernate.cfg.xml как

<property name="connection.connection_string">Server=dev;Initial Catalog=DBTest;Integrated Security=True;</property>

выдает ошибку: SqlException: Ошибка входа пользователя

Но если я изменю строку подключения на:

<property name="connection.connection_string">Server=dev;Initial Catalog=DBTest;User Id=twr;Password=manager1;</property>

Он успешно вызывает сервисные методы.

В то время как вся библиотека служб WCF, хостинг службы Windows и консольное приложение находятся только на моем локальном компьютере,

Может кто-нибудь помочь мне понять, почему он не работает с Integrated Security = true?

Спасибо!

1 Ответ

4 голосов
/ 29 октября 2009

Integrated Security = true означает, что это приложение будет пытаться аутентифицировать себя в режиме «Аутентификация Windows» на SQL Server, к которому вы подключаетесь. Служба работает под определенной учетной записью пользователя - она ​​будет использовать разрешения учетной записи этого пользователя для входа в SQL.

Если ваш экземпляр SQL Server не разрешает вход для учетной записи пользователя этой службы Windows, вы получите эту ошибку. Вполне вероятно, что пользователь, с которым запускается служба, так как в вашем модульном тесте отличается от приложения консоли тестирования.

Попробуйте: запустите тестовое консольное приложение и запустите диспетчер задач. На вкладке процессов посмотрите процесс, связанный с вашим сервисом, и имя пользователя, под которым он запущен. Запустите ваш модульный тестовый фреймворк и запишите имя пользователя - они, вероятно, разные.

Перейдите в SQL Server Management Studio и проверьте, чтобы в разделе Безопасность -> Войти в систему указана ли учетная запись, под которой работает служба (та, которую вы обнаружили с помощью диспетчера задач). Если нет, добавьте его и предоставьте ему разрешения.

...