报告查看器错误:请求失败,HTTP状态401:未授权

问题描述:

我有一个asp.net c#web应用程序,包含远程处理模式报告。我正在使用报表查看器控件来呈现报表。当我以调试模式运行应用程序时,我能够查看我的报告,但是当我将应用程序发布到其他服务器时,我收到以下错误消息:报告查看器错误:请求失败,HTTP状态401:未授权

HTTP状态401的请求失败:未经授权。

我的报表服务器位于与我发布的Web应用程序的位置不同的服务器上。我已经添加了新的角色分配到我的报告服务器,并添加到我的web.config但错误仍然存​​在。我想我在reportviewer的aspx页面中缺少一些东西。

任何输入,将不胜感激。

我假设你已经设置你的代码隐藏的服务器,如本

reportviewer.ServerReport.ReportServerUrl = "http://{server_ip}/reportserver"; 

或通过报表查看器控件的属性。确保将{server_ip}更改为报表服务器的实际值。

我以前见过的其他类似问题与访问个人报告有关。由于这是跨服务器,因此您需要设置代理用户才能查看报告。

这里有两个例子来自MSDN:

Example 1

Example 2

+0

我已经设置为你所提到的报表服务器URL中使用Page_Load & Page_Init。我尝试的另一个测试是从我的应用程序发布的服务器转到我的报告服务器的URL。它提示我输入用户名/密码,当我使用domain_name /用户名和密码时,我可以查看报告服务器。我查看了你的链接并试图添加下面的代码:ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials(“username”,“pwd”,“domain”);我已经导入了Microsoft.Reporting.Webforms,但它说无法找到类型或名称空间。 – user438331 2010-09-09 18:59:00

+0

首先,只需确保将{server_ip}替换为reportserver的实际IP。其次,您实际上需要从提供的链接中包含该类,以便它可以用作服务器凭据。试试看看它是否能解决你的问题。祝你好运! – Madison 2010-09-09 22:05:52

+0

感谢您的回复。我已经使用reportserver url报告server_ip。我将你的Example2中的代码添加到我的代码中。 但是,现在当我测试我的应用程序并尝试在本地运行报告时,它不会返回任何内容。没有错误,但也没有报告。即使我已经在我的web.config文件和我的reportviewer.aspx文件中指定了它,我认为它不再访问reportserver网址。 此前,这些报告在本地运行良好。 – user438331 2010-09-13 18:14:32

是的!以这种方式

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    ReportViewer1.Visible = True 
    Dim strReportsFolder As String = ConfigurationManager.AppSettings("ReportsFolder") 
    Dim reportName As String = "report1" 
    ReportViewer1.ServerReport.ReportPath = strReportsFolder + reportName 

End Sub 

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As EventArgs) 

    PopulateReport(ReportViewer1, "") 

End Sub 

Public Shared Sub PopulateReport(ByVal rptViewer As ReportViewer, ByVal reportName As String) 

    Dim strReportServer As String = ConfigurationManager.AppSettings("ReportServer") 
    Dim strUserName As String = ConfigurationManager.AppSettings("Username") 
    Dim strPassword As String = ConfigurationManager.AppSettings("Password") 
    Dim strDomain As String = ConfigurationManager.AppSettings("Domain") 

    rptViewer.ServerReport.ReportServerUrl = New Uri(strReportServer) 
    rptViewer.ServerReport.ReportServerCredentials = New ReportViewerCredentials(strUserName, strPassword) 

End Sub 
+0

虽然你没有对域做任何事情? – Yodacheese 2013-11-21 06:23:01