2010-09-28 32 views
9

Tôi gặp lỗi "Yêu cầu không thành công với trạng thái HTTP 401: Không được ủy quyền" bất cứ khi nào tôi cố liệt kê các báo cáo trên máy chủ báo cáo của mình. Điều kỳ lạ là, nó hoạt động khi tôi chạy ứng dụng asp.net trên máy dev của tôi đánh máy chủ dịch vụ báo cáo dịch vụ web url (http://www.example.com/reports/reportservice2005.asmx?wsdl) nhưng khi ứng dụng asp.net được cài đặt trên máy chủ (chạy iis 7) đánh cùng url Tôi nhận được lỗi. Dưới đây là tôi thiết lập:Dịch vụ báo cáo 2008: "Trạng thái HTTP 401: Không được phép" Số phát hành

Server:

SQL Server dịch vụ Báo cáo năm 2008 (không R2)

dịch vụ Web url: http://www.example.com/reports/reportservice2005.asmx?wsdl

Khách hàng

Tạo một proxy ReportingServices2005.cs

Web.config có

Mã niêm yết báo cáo:

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

Mã Đằng sau:

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

'objRS' ở đây là gì? –

Trả lời

13

Sau vài giờ Googling nhiều diễn đàn và các bài báo, tôi thấy rằng một tính năng bảo mật trong Windows Server gọi là "loopback kiểm tra "(http://support.microsoft.com/kb/926642) đã gây ra sự cố. Nó xảy ra vì tôi có cả máy chủ báo cáo và máy chủ IIS trên cùng một máy và tôi đã sử dụng tên miền đầy đủ (FQDN: http://www.example.com/reportserver) để truy cập vào các báo cáo. Tôi đã giải quyết vấn đề này bằng cách sử dụng tên của máy chủ thay vì tên miền, tức là . Tôi hi vọng điêu nay se giup được ai đo.

2

Điều gì đó khác để kiểm tra xem tôi có gặp phải hôm nay không - hãy chắc chắn kiểm tra xem tài khoản Windows của người dùng có bị khóa không. Điều này sẽ dẫn đến yêu cầu /reportserver trả lại 401 not authorized.

Các vấn đề liên quan