Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > ошибка при открытии базы данных web-сервисом


Автор: sedoy 1.3.2008, 12:05
Я создал простенький веб-сервис,который при его вызове обращается к базе данных.Когда я  его с vs2005 открываю и компилирую-автоматически запускается asp.net development server и порт через который выполняется web-сервис.При этом запускается браузер (http://localhost:3867/mySrvice/Service.asmx).В этом случае web-сервис при обращении к базе данных (БД запущена на sql-сервере)отображает данные в формате xml.

Вопрос:
Почему,когда создаю виртуальный каталог в IIS и укзываю путь на тот же веб-сервис при его вызове в браузере (http://localhost/myService/Service.asmx)он выполняется, но вместо необходимых данных выводит сообщние об ошибке открыть базу данных?

исходный код 
файл service.asmx :

<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service" %>


файл App_Code/Service.cs :

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service () {}
    [WebMethod]
    public DataSet getMyTable() {
        SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
        sb.DataSource = @".\sqlexpress"; sb.InitialCatalog = "Cars"; sb.IntegratedSecurity = true;
        SqlConnection sqlConn = new SqlConnection(sb.ConnectionString.ToString() );
        SqlDataAdapter myDA =new SqlDataAdapter("Select * from Inventory", sqlConn);
        DataSet ds = new DataSet();
        myDA.Fill(ds, "Inventory");
        return ds;
    }
    
}
сообщение в ответе web-сервиса:

System.Data.SqlClient.SqlException: Cannot open database &quot;Cars&quot; requested by the login. The login failed.
Login failed for user 'OSNOVA\ASPNET'...и т.д.

помогите разобраться почему при вызове web-сервиса с виртуального каталога отображается ошибка при открытии базы данных?
что нужно сделать,чтоб ее устранить?

Автор: Crimp 1.3.2008, 16:58
у тябя же всё есть, смотри что тебе выдаёт 
System.Data.SqlClient.SqlException: Cannot open database &quot;Cars&quot; requested by the login. The login failed.
Login failed for user 'OSNOVA\ASPNET'...и т.д.

ключевая фраза Login failed smile

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

Если это конечно то о чём я подумал.

Автор: sedoy 1.3.2008, 18:21
Не помогло. Я думаю дело не в этом, ведь веб-сервис один и тот же - строка подключения одна и таже. С  vs 2005 все работает, а с вызовом локального веб -узла данные не может открыть в БД

Автор: Crimp 1.3.2008, 22:46
Потому что запуск из под студии и без, две большие разници, и он тебе пишет что Login failed. Ты помотрел какой тип аудентификации у тебя включён для коннета. Надо выключить анонимуса smile и вкл. window аудентификацию.

Автор: sedoy 2.3.2008, 00:13
Я это выставил. Зашел в свойства моего вртуального каталога --> безопасность каталога-->ананимный доступ (поставил отметку в поле анонимный доступ и поле встроенная проверка подлинности windows.
ничего это не помагает.
Я так понял что надо еще посмотреть в панель управления-->администрирование-->локальная политика безопасности-->локальные политики и там уже параметры безопасности и назначение прав пользователям
если здесь надо еще что -то поменять, то что именно?

или может в строке подключения что-то подкорректировать.Сейчас так:
 
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
        sb.DataSource = @".\sqlexpress"; sb.InitialCatalog = "Cars"; sb.IntegratedSecurity = true;
        //sb.UserID = "sa";sb.Password="";
        SqlConnection sqlConn = new SqlConnection(sb.ConnectionString.ToString() );
        SqlDataAdapter myDA =new SqlDataAdapter("Select * from Inventory", sqlConn);
        DataSet ds = new DataSet();
        myDA.Fill(ds, "Inventory");
       

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)