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

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

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

это очень странно, потому что, если я только помещаю 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);
        }
    }

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

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

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

1 Ответ

1 голос
/ 25 января 2011

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

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

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

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

...