Проблема с аутентификацией пользователя при попытке доступа к веб-службе службы отчетов SQL Server

У меня есть SSRS (стандарт 2008 года, а не R2), поэтому я использую ReportExecution2005.asmx и ReportService2005.asmx для их запуска.

Мы разработали приложение, которое может подключаться к SSRS через веб-сервис. Он хорошо работал на нашем тестовом сервере, но теперь я пытаюсь настроить новый сервер на виртуальной машине, и ни в коем случае, каждый раз, когда приложение пытается подключиться к веб-сервису SSRS, я получаю сообщение 401 unautorized.

это очень странно, потому что, если я помещаю URL-адрес .asmx в firefox на клиентской рабочей станции, он запрашивает у меня имя пользователя и пароль, я ввожу его и получаю определение wsdl, поэтому я думаю, что доступ правильный.

Вот мой код:

    public ReportGateway()
    {
        _rs = new ReportingService2005 { Credentials = new NetworkCredential(ConfigurationManager.AppSettings["ReportGatewayUser"], ConfigurationManager.AppSettings["ReportGatewayPassword"])  };
        _rs.Url = "http://MyMachine:80/ReportServer/ReportService2005.asmx";//?? I saw when I was debugging that it wasn't reading the value in the app.config, but keeping the url of the reference when I created it, so for my test of the moment, I hard-setted it
        _rsExec = new ReportExecution2005.ReportExecutionService { Credentials = new NetworkCredential(ConfigurationManager.AppSettings["ReportGatewayUser"], ConfigurationManager.AppSettings["ReportGatewayPassword"]) };
        _rsExec.Url = "http://MyMachine:80/ReportServer/ReportExecution2005.asmx";//Same
        GenerateReportList();
    }
    [MethodImpl(MethodImplOptions.Synchronized)]
    private void GenerateReportList()
    {
        try
        {
            Dictionary<String, SRSSReport> reports = new Dictionary<String, SRSSReport>();
            foreach (var children in _rs.ListChildren("/", true))
            {
                if (children.Type == ItemTypeEnum.Report)
                {
                    SRSSReport report = new SRSSReport {Name = children.Name, Path = children.Path};
                    ReportParameter[] parameters = _rs.GetReportParameters(children.Path, null, false, null, null);
                    foreach (ReportParameter parameter in parameters)
                        report.Parameters.Add(new SRSSReportParameter {Name = parameter.Name, Type = _typeConverstion[parameter.Type]});
                    reports.Add(report.Path, report);
                }
            }
            lock (_lockObject)
            {
                _reports = reports;
            }
        }catch(Exception ex)
        {
            _reports = new Dictionary<string, SRSSReport>();
            Logger.Instance.Error("Error when contacting the reporting server", ex);
        }
    }

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

У вас есть идея / решение / ... чтобы мне помочь?

Большое спасибо, любая помощь будет очень признательна.


person J4N    schedule 24.01.2011    source источник


Ответы (1)


Вам нужно вызвать LogonUser метод веб-служб SSRS. Из аутентификации в службах Reporting Services:

Основным способом аутентификации на сервере отчетов в службах Reporting Services является метод LogonUser. Этот член веб-службы Reporting Services может использоваться для передачи учетных данных пользователя на сервер отчетов для проверки. Ваше базовое расширение безопасности реализует IAuthenticationExtension.LogonUser, который содержит ваш пользовательский код аутентификации. В примере проверки подлинности с помощью форм - LogonUser, который выполняет проверку проверки подлинности по предоставленным учетным данным и настраиваемому пользовательскому хранилищу в базе данных.

Если вам нужно проверить наличие проблем с IIS, ознакомьтесь с Устранением ошибок HTTP 401 в IIS.

Кроме того, вы должны знать, что при подключении к сайту IIS, который ожидает от вас использования аутентификации, вы сначала получите 401 Unauthorized ошибку, указывающую на то, что вам необходимо предоставить учетные данные. Веб-браузеры проглатывают это незаметно, а затем либо предоставляют текущие учетные данные Windows (например, IE), либо запрашивают учетные данные (например, Firefox, если вы не настроили его каким-либо образом для автоматического представления).

person ErikE    schedule 25.01.2011
comment
Я знаю, что на самом деле мне кажется, что я сделал плохую конфигурацию. Я удалил всех пользователей SRSS и снова установил их, и он работал - person J4N; 24.02.2011