2010-09-28 24 views
9

Recibo el error "La solicitud falló con el estado HTTP 401: no autorizado" cada vez que trato de enumerar los informes en mi servidor de informes. Lo extraño es que funciona cuando ejecuto la aplicación asp.net en mi máquina de desarrollo y llego a la URL del servicio web de servicios de informes del servidor (http://www.example.com/reports/reportservice2005.asmx?wsdl) pero cuando la aplicación asp.net está instalada en el servidor (ejecutando iis 7) pulsando el mismo url obtengo el error. Aquí está mi establecido:Reporting Services 2008: "Estado HTTP 401: no autorizado" Problema

Server:

Reporting Services de SQL Server 2008 (R2) no

de servicios Web url: http://www.example.com/reports/reportservice2005.asmx?wsdl

cliente

creado un proxy de ReportingServices2005.cs

Web.config tiene

Código a la lista informes:

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

código subyacente:

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

¿Qué es 'objRS' aquí? –

Respuesta

13

Después de varias horas de buscar en Google numerosos foros y artículos, he encontrado que una característica de seguridad en Windows Server llamado "bucle invertido check "(http://support.microsoft.com/kb/926642) estaba causando el problema. Sucedió porque tengo mi servidor de informes y el servidor IIS en la misma máquina y estaba usando el nombre de dominio completo (FQDN: http://www.example.com/reportserver) para acceder a los informes. Lo resolví simplemente usando el nombre del servidor en lugar del nombre de dominio, es decir, . Espero que esto ayude a alguien.

2

Algo más para comprobar que me encontré hoy: asegúrese de comprobar que la cuenta de Windows del usuario no está bloqueada. Esto provocará solicitudes al /reportserver para devolver 401 not authorized.

Cuestiones relacionadas