2010-09-28 7 views
9

Je reçois l'erreur "La requête a échoué avec le statut HTTP 401: non autorisé" chaque fois que j'essaie de lister les rapports sur mon serveur de rapports. Ce qui est bizarre, c'est que quand je lance l'application asp.net sur ma machine dev, j'atteins l'url du service web de reporting du serveur (http://www.example.com/reports/reportservice2005.asmx?wsdl) mais quand l'application asp.net est installée sur le serveur (exécutant iis 7) url je reçois l'erreur. Voici ma mise en place:Reporting Services 2008: "Statut HTTP 401: non autorisé" Problème

serveur:

Reporting Services SQL Server 2008 (non R2)

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

client

a créé un ReportingServices2005.cs proxy

Web.config a

code à la liste des rapports:

<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 Derrière:

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'est-ce que 'objRS' ici? –

Répondre

13

Après plusieurs heures de recherche sur Google de nombreux forums et articles, j'ai trouvé qu'une fonctionnalité de sécurité dans Windows Server appelé « rebouclage check "(http://support.microsoft.com/kb/926642) était à l'origine du problème. Cela est dû au fait que mon serveur de rapports et mon serveur IIS sont sur la même machine et que j'utilise le nom de domaine complet (FQDN: http://www.example.com/reportserver) pour accéder aux rapports. J'ai résolu cela en utilisant simplement le nom du serveur au lieu du nom de domaine i.e . J'espère que ça aidera quelqu'un.

2

Quelque chose d'autre à vérifier que j'ai rencontré aujourd'hui - assurez-vous de vérifier que le compte Windows de l'utilisateur n'est pas bloqué. Cela provoquera des demandes à /reportserver pour renvoyer 401 not authorized.