2010-09-28 14 views
9

Ich erhalte den Fehler "Die Anforderung ist mit dem HTTP-Status 401: Nicht autorisiert fehlgeschlagen", wenn ich versuche, die Berichte auf meinem Berichtsserver aufzulisten. Die seltsame Sache ist, es funktioniert, wenn ich die asp.net-Anwendung auf meinem Rechner laufen lasse, die Server-Reporting-Dienste Web-Service-URL (http://www.example.com/reports/reportservice2005.asmx?wsdl), aber wenn die ASP.net-App auf dem Server installiert ist (läuft IIS 7) trifft die gleiche URL Ich erhalte den Fehler. Hier ist mein ein:Reporting Services 2008: "HTTP-Status 401: Nicht autorisiert" Problem

Server:

SQL Server Reporting Services 2008 (nicht R2)

Web-Service-URL: http://www.example.com/reports/reportservice2005.asmx?wsdl

Kunde

Erstellt einen Proxy ReportingServices2005.cs

Web.config hat

-Code Berichte zur Liste:

<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> 

-Code Behind:

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(); 

} 
} 
+1

Was ist "objRS" hier? –

Antwort

13

Nach mehreren Stunden zahlreiche Foren und Artikeln Googeln fand ich, dass ein Feature Sicherheit in Windows Server „Loopback genannt check "(http://support.microsoft.com/kb/926642) verursachte das Problem. Es ist passiert, weil ich sowohl meinen Berichtsserver als auch den IIS-Server auf demselben Computer habe und den vollqualifizierten Domänennamen (FQDN: http://www.example.com/reportserver) für den Zugriff auf die Berichte verwendete. Ich löste das, indem ich einfach den Namen des Servers anstelle des Domain-Namens verwendete, d. H. . Ich hoffe, das hilft jemandem.

2

Noch etwas zu überprüfen, dass ich heute rannte - stellen Sie sicher, dass das Windows-Konto des Benutzers nicht gesperrt ist. Dies führt dazu, dass Anfragen an /reportserver401 not authorized zurückgeben.

Verwandte Themen