2010-10-04 5 views
0

У меня есть проект C# Service, где я подключаюсь к SQL и получаю данные. Когда я отлаживаю локально, например: на Visual Studion Developement Server он работает хорошо. Но когда я загружаюсь на сервер (просто localhost/MyProject /), SqlCommand() выдает исключение. Есть ли способ получить дополнительную информацию о SqlCommand()? Какие разрешения я должен установить для запуска веб-службы на сервере?Сервер не может подключиться к SQL-серверу

Может быть режим детали: Проект в VS2008 envirenoment это работает хорошо:

http://localhost:50301/GetJpeg.aspx?ra=224.5941&dec=-1.09&width=1000&height=1000&scale=1

но на http://localhost/GetJpeg.aspx?ra=224.5941&dec=-1.09&width=1000&height=1000&scale=1 нет.

Исключением является на самом деле не исключение:

SqlDataReader reader не возвращает результат во втором случае:

reader = cmdCenter.ExecuteReader(); 
       if (reader.Read()) 
       { 
        //Do Something 

        reader.Close(); 
       }        
       else 
       {     
        throw new Exception("Request is failed"); 

       } 

спасибо Арман.

EDIT Просто для информации: В одном случае код отлажена с помощью ASP.NET Developement Server, а второй один работает на IIS 7.0

UPDATE

После глубокого копания I обнаружено: соединение открыто и подключено, обычные запросы в порядке, но запросы с сохраненными функциями не работают ... может быть, что IIS пропустила конфигурацию?

+1

добавить обработку и регистрацию исключений: log4Net –

+1

И исключение ......? – Jamiec

+1

Можете ли вы предоставить немного больше информации, например. стек/трассировка из исключаемого исключения –

ответ

1

Если вы используете элемент управления SqlCommand (перетаскивание на страницу) вместо объекта SqlCommand (код), лучшим вариантом будет добавить обработчик ошибок на уровне страницы (http://msdn.microsoft.com/en-us/library/ed577840.aspx).

Скорее всего, проблема заключается в том, что ваша строка подключения использует SSPI для аутентификации на SQL Server (интегрированная/защита домена). Это позволит вам подключаться через Visual Studio, но не после его развертывания. Вы можете посмотреть эту статью (http://msdn.microsoft.com/en-us/library/bsz5788z.aspx). Ответы в этой статье не идеальны, но они заставят вас двигаться вперед. Лучшие подходы могут стать довольно сложными. Прочитайте их, как только вы снова заработаете приложение.

+0

Спасибо, что поставили меня на правильный путь. Я задавался вопросом, почему мне нужно олицетворять, если я использую в web.conf Arman

+0

проблема с разрешениями .... спасибо – Arman

0

Вы можете подключить отладчик в VS к IIS на вашем поле и продолжить отладку. Для этого перейдите в Debug-> Attach to Process, а затем найдите процесс W3wp.exe, на котором запущен пул приложений, в котором запущено ваше приложение.

+0

Отладчик атакован, поэтому я обнаружил, что reader.Read() не возвращает результаты во втором случае ... – Arman

+0

В одном случае код отлаживается через ASP.NET Developement Server, а второй выполняется на ISS 7.0 – Arman

+0

Вы можете отлаживать приложение IIS 7, вам просто нужно знать, какой процесс w3wp.exe запускает ваше приложение. Cassini, веб-сервер отладки VS, удобен, но слишком часто он не реплицирует среду веб-сервиса производства, чтобы правильно подготовить и протестировать приложение. –

0
try 
{ 
    using (SqlConnection connection = new SqlConnection("Your connection string here")) 
    { 
     using (SqlCommand command = new SqlCommand("your sql here", connection)) 
     { 
      connection.Open(); 
      using (SqlDataReader reader = command.ExecuteReader()) 
      { 
      } 
     } 
    } 
} 
catch (Exception exception) 
{ 
    System.Diagnostics.Debug.WriteLine(exception); 
} 

Точка останова в уловке, чтобы увидеть исключение в вашем отладчике.

+0

Спасибо за фрагмент. Как проверить, нормально ли читатель? – Arman

+0

Я проверял, что состояние соединения «открыто». Таким образом, пользователь может подключиться к базе данных, но запрос по-прежнему пуст. – Arman

+0

Вы можете проверить 'reader.HasRows', или при возврате многих строк используйте' while reader.Read() 'для получения каждой строки. Если возникает проблема с вызовом '.ExecuteReader', будет выведено' SqlException' или 'InvalidOperationException'. – JLWarlow

Смежные вопросы