SoapHttpClientProtocol.ReadResponse - Die Anforderung ist fehlgeschlagen mit HTTP-status 401: Unauthorized
Habe ich eine ASP.NET (v2.0) web-Anwendung, die eine Referenz zu einer SQL Server-Reporting Services-208 R2-Instanz (mit der ReportService2010.asmx-service-Endpunkt). Die web-Anwendung gehostet wird, die auf ServerA und der Reporting Services-Instanz gehostet wird, auf ServerB. ServerA wird unter Windows Server 2003 (IIS6) und ServerB ist unter Windows Server 2008 R2.
Die web-Anwendung konfiguriert ist zum verwenden der Windows-Authentifizierung und Identitätswechsel ist eingeschaltet. Bei mir läuft die web-Anwendung lokal auf ServerA (unter Verwendung einer remote-desktop-Verbindung) funktioniert es, aber wenn ich von meinem desktop-Rechner (Windows XP) bekomme ich folgende Fehlermeldung:
Server Error in '/MyWebApp' Application.
Fehler bei die Anforderung mit HTTP-status 401: Unauthorized. Beschreibung:
Eine nicht behandelte Ausnahme ist aufgetreten während der Ausführung der aktuellen
web-Anfrage. Bitte überprüfen Sie die Stapelüberwachung für weitere Informationen über
die Fehler und wo Sie Ihren Ursprung in den code.Exception Details: System.Net.WebException: Fehler bei Die Anforderung mit
HTTP-status 401: Unauthorized.Quelle Fehler:
Wurde eine unbehandelte Ausnahme generiert, die während der Ausführung des
aktuellen web-Anfrage. Informationen über den Ursprung und die Lage des
die Ausnahme identifiziert werden kann mit der Ausnahmestapelüberwachung unten.Stack Trace:
[WebException: Fehler bei Die Anforderung mit HTTP-status 401: Unauthorized.]
System.Web.Services.- Protokolle.SoapHttpClientProtocol.ReadResponse(SoapClientMessage
Nachricht, WebResponse-Antwort, Stream responseStream, Boolean
asyncCall) +431289
System.Web.Services.- Protokolle.SoapHttpClientProtocol.Invoke(String
methodName, Object[] parameters) +204
ReportingServices.ReportingService2010.ListChildren(String ItemPath,
Boolean Recursive) +81 Standard.LoadReports() +54
Standard.Page_Load(Object sender, EventArgs e) +224
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Objekt
o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,
EventArgs e) +35 System.Web.UI.Kontrolle.OnLoad(EventArgs e) +99
System.Web.UI.Kontrolle.LoadRecursive() +50
System.Web.UI.Seite.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+627
Version Information: Microsoft .NET Framework, Version:2.0.50727.3634;
ASP.NET-Version:2.0.50727.3634
LoadReports Methode:
private void LoadReports()
{
ReportingService2010 rService = new ReportingService2010();
rService.Credentials = System.Net.CredentialCache.DefaultCredentials;
CatalogItem[] catalogItems;
catalogItems = rService.ListChildren(ReportPath, true);
BuildTree(catalogItems);
}
Ereignisprotokoll der Anwendung auf ServerA enthält die folgenden zusätzlichen Informationen:
Event Type: Warning
Event Source: ASP.NET 2.0.50727.0
Event Category: Web Event
Event ID: 1309
Date: 28/06/2012
Time: 11:25:16
User: N/A
Computer: ServerA
Description:
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 28/06/2012 11:25:16
Event time (UTC): 28/06/2012 10:25:16
Event ID: 11f6bec3e91045229f4e34a5d2de78e9
Event sequence: 4
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/1/Root/MyWebApp-1-129853527126453497
Trust level: Full
Application Virtual Path: /MyWebApp
Application Path: c:\inetpub\wwwroot\MyWebApp\
Machine name: ServerA
Process information:
Process ID: 1180
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Exception information:
Exception type: WebException
Exception message: The request failed with HTTP status 401: Unauthorized.
Request information:
Request URL: http://ServerA/MyWebApp/Default.aspx
Request path: /MyWebApp/Default.aspx
User host address: 192.168.100.130
User: DOMAIN\mylogin
Is authenticated: True
Authentication Type: Negotiate
Thread account name: NT AUTHORITY\NETWORK SERVICE
Thread information:
Thread ID: 1
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace:
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at ReportingServices.ReportingService2010.ListChildren(String ItemPath, Boolean Recursive)
at Default.LoadReports()
at Default.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHe.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InformationsquelleAutor Tom Hunter | 2012-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aktivieren Sie die Authentifizierung delegation
Mithilfe der Active Directory-Benutzer und-Computer der Microsoft Management Console (Start > Ausführen > "dsa.msc"), öffnen Sie die Eigenschaften für den ServerA-server-Eintrag. Unter der Delegation, wählen Sie Trust this computer for delegation to any service (Kerberos only).
Konfigurieren Sie Dienstprinzipalnamen
Verwenden Sie die folgenden Befehle zum registrieren der Service Principal Names (SPNs):
Wo
ReportingServicesServiceAccount
ist das Dienstkonto zum ausführen des Reporting Services-Dienst auf ServerB.InformationsquelleAutor Tom Hunter