Службы Reporting Services 2008: проблема «HTTP-статус 401: неавторизован» - PullRequest
9 голосов
/ 28 сентября 2010

Я получаю сообщение об ошибке «Запрос не выполнен с HTTP-статусом 401: не авторизован» при попытке вывести отчеты на моем сервере отчетов.Странно то, что это работает, когда я запускаю приложение asp.net на своем компьютере разработчика, ударяя по URL-адресу веб-службы служб отчетов сервера (http://www.example.com/reports/reportservice2005.asmx?wsdl), но когда приложение asp.net установлено на сервере (работает iis 7)), нажав тот же URL, я получаю сообщение об ошибке. Вот мои настройки:

Сервер:

Службы отчетов SQL Server 2008 (не R2)

URL веб-службы: http://www.example.com/reports/reportservice2005.asmx?wsdl

Клиент

Создан прокси ReportingServices2005.cs

Web.config имеет

Код для просмотра отчетов:

<asp:ListView ID="lvReportList" runat="server">
<LayoutTemplate>
    <ul>
        <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
    </ul>
</LayoutTemplate>
<ItemTemplate>
    <li>
        <asp:HyperLink runat="server" ID="hpReportLink" NavigateUrl='<%#Eval("Url")%>'><%#Eval("Name")%></asp:HyperLink>
    </li>
</ItemTemplate>
<EmptyDataTemplate>
    <div>
        No reports to display.
    </div>
</EmptyDataTemplate>

Код сзади:

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
    string rWebServiceUrl = ConfigurationManager.AppSettings["RSWebserviceUrl"];
    string reportServerFolder = ConfigurationManager.AppSettings["ReportServerFolder"];
    string domain = ConfigurationManager.AppSettings["RSDomain"];
    string userName = ConfigurationManager.AppSettings["RSUsername"];
    string password = ConfigurationManager.AppSettings["RSPassword"];

    objRS.Url = rWebServiceUrl;
    objRS.Credentials = new NetworkCredential(userName, password, domain);

    ReportingServices2005.CatalogItem[] items = objRS.ListChildren(reportServerFolder, false);

    var reportList = from p in items
                     select new
                     {
                         Name = p.Name,
                         Url = String.Format("{0}?reportPath={1}/{2}", ReportViewerUrl, reportServerFolder, p.Name)
                     };

    lvReportList.DataSource = reportList;
    lvReportList.DataBind();

}
}

Ответы [ 2 ]

13 голосов
/ 05 октября 2010

После нескольких часов поиска в Google многочисленных форумов и статей я обнаружил, что проблема безопасности в Windows Server, называемая «проверкой петли» (http://support.microsoft.com/kb/926642), вызывала проблему. Это произошло потому, что у меня есть и сервер отчетов, и IISсервер на той же машине, и я использовал полное доменное имя (FQDN: http://www.example.com/reportserver) для доступа к отчетам. Я решил это, просто используя имя сервера вместо имени домена, то есть http://mymachinename/reportserver. Надеюсь, это кому-нибудь поможет.

2 голосов
/ 22 октября 2013

Что-нибудь еще, чтобы проверить, что я столкнулся сегодня - убедитесь, что учетная запись пользователя Windows не заблокированаЭто приведет к тому, что запросы к /reportserver вернутся 401 not authorized.

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