Когда я использую службы asmx и службы отчетов SSRS, я получаю «Запрос не выполнен с состоянием http 401: не авторизован» - PullRequest
0 голосов
/ 17 марта 2020

Я пытался вызвать службу отчетов (asmx) из моего asp. net веб-приложения, запустив его локально. Затем произошло исключение, сказав. The request failed with http status401:unauthorised.

В моем анализе я понял проблему, вызванную кодом ниже

SSRSWebService.ReportingService2005 rs = new SSRSWebService.ReportingService2005();
rs.Credentials = new MyReportServerCredentials().NetworkCredentials;

и

Uri reportUri = new Uri(ConfigurationManager.AppSettings["ReportServerManagement.ReportingService2005"]);
this.rptViewer.ServerReport.ReportServerCredentials = new MyReportServerCredentials();

1 Ответ

0 голосов
/ 17 марта 2020

В моем детальном анализе я понял, что проблема была в том, что учетные данные, настроенные в serviceObject.credential ИЛИ ServerReport.ReportServerCredentials , были неверными. Это можно исправить двумя различными способами: либо установить учетные данные по умолчанию с кодом ниже

rs.Credentials = System.Net.CredentialCache.DefaultCredentials;//"rs" is report object

, либо найти приведенный ниже код и установить надлежащие учетные данные аутентифицированного пользователя в коде

 public WindowsIdentity ImpersonationUser
{
    get
    {
        // Use the default Windows user.  Credentials will be
        // provided by the NetworkCredentials property.
        return null;
    }
}

public ICredentials NetworkCredentials
{
    get
    {
        // Read the user information from the Web.config file.  
        // By reading the information on demand instead of 
        // storing it, the credentials will not be stored in 
        // session, reducing the vulnerable surface area to the
        // Web.config file, which can be secured with an ACL.

        // User name
        string userName =
            <<AccurateUserName;>>


        // Password
        string password =
            <<AccuratePassword;>>

        // Domain
        string domain = <<AccurateDomainName;>>


        return new NetworkCredential(userName, password, domain);
    }
}

В Чтобы проверить, есть ли у какого пользователя доступ, нам нужно ввести URL-адрес службы, заканчивающийся asmx ( http: /MyServiceHostedServer/MyService.asmx) в веб-браузере. Он подскажет имя пользователя и пароль. Укажите имя пользователя: Домен \ Имя пользователя и пароль. Если мы сможем увидеть файл wsdl xml, то у этого пользователя есть доступ.

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