I'm getting the error "The request failed with HTTP status 401: Unauthorized" whenever I try to list the reports on my reporting server. The weird thing is, it works when I run the asp.net application on my dev machine hitting the server reporting services web service url (http://www.example.com/reports/reportservice2005.asmx?wsdl) but when the asp.net app is installed on the server (running iis 7) hitting the same url I get the error. Here's my set up:
Server:
SQL Server Reporting services 2008 (not R2)
Web service url: http://www.example.com/reports/reportservice2005.asmx?wsdl
Client
Created a proxy ReportingServices2005.cs
Web.config has
Code to list reports:
<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();
}
}
After several hours of Googling numerous forums and articles, I found that a security feature in Windows Server called "loopback check" (http://support.microsoft.com/kb/926642) was causing the issue. It happened because I have both my report server and IIS server on the same machine and I was using the fully qualified domain name (FQDN: http://www.example.com/reportserver) to access the reports. I solved this by simply using the name of the server instead of the domain name i.e http://mymachinename/reportserver. I hope this helps someone.
Something else to check that I ran into today - be sure to check that the user's Windows account is not locked out. This will cause requests to /reportserver
to return 401 not authorized
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With