Доступ к SQL Server по сети из службы Windows - PullRequest
2 голосов
/ 01 июля 2010

Я создал класс, который будет подключаться к SQL Server для запуска хранимой процедуры. Когда этот класс используется в решении Windows Forms, к базе данных можно получить доступ успешно. Когда класс помещается в службу Windows, я получаю следующую ошибку:

Сетевой или экземплярный произошла ошибка при установлении подключение к SQL Server. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра правильно и что SQL Server настроен для разрешения удаленного соединения. (поставщик: сеть SQL Интерфейсы, ошибка: 26 - Ошибка определения местоположения Указанный сервер / экземпляр)

Я подозреваю, что проблема связана с разрешениями.

Это раздел соответствующего кода:

SqlConnection conn = new SqlConnection(j.ConnectionString);
SqlCommand cmd = new SqlCommand(j.Query, conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);

DataSet ds = new DataSet("Table1");

da.Fill(ds, "Table1");    // <----- error occurs here (Windows Service only)

Версия SQL Server

Microsoft SQL Server 2008 (SP1) - 10.0.2766.0 (X64)   
Enterprise Edition (64-bit) on Windows NT 5.2 <X64> 
(Build 3790: Service Pack 2)

Версия Visual Studio: Microsoft Visual C# 2008 Версия фреймворка - 3.5 SP1.

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Службам Windows запрещено использовать сетевые ресурсы при использовании имени входа по умолчанию «LocalService». Таким образом, вам необходимо запустить службу под учетной записью пользователя, которая разрешает доступ к сети. Вот возможности:

1.) Если вы используете соединение «NetworkService», вам не следует использовать встроенную аутентификацию Windows при подключении к службе SQL, но вы можете использовать аутентификацию SQL с именем пользователя и паролем. (Технически вы можете использовать встроенную аутентификацию, если вы дадите учетной записи домена клиентского компьютера - например, CLIENT $ - разрешения на базу данных ... но это не рекомендуется.)

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

1 голос
/ 01 июля 2010

Эта конкретная ошибка означает только то, что клиент не может подключиться к серверу. Это до того, как он даже делает разрешения. Убедитесь, что сервер приложений может подключиться. Несколько вещей, чтобы попробовать:

1) Выполните телнет к IP-адресу сервера через порт 1433 (при условии, что используется порт по умолчанию) Если это не работает, есть ли маршрутизатор или межсетевой экран, блокирующий доступ к серверу? 2) Перейдите в ODBC (Источники данных) на сервере приложений, настройте запись DNS и нажмите кнопку «Тест» в конце. Это проверит, может ли драйвер клиента общаться с SQL Server.

Скорее всего, шаг 1 завершится неудачей. Вы получите ту же ошибку, если вы измените имя сервера на «BigBird». Это общая ошибка: «Вы сказали мне подключиться к этому серверу, но ни один сервер не ответил на запрос на подключение». Это происходит до того, как между клиентом и сервером произойдет «рукопожатие» и проверка разрешений.

НТН, Eric

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...