2009-07-30 12 views
1

ich diesen Code haben:SPSite in Web-Service wirft 401 Fehler

using (var site = new SPSite(myUrl)) { 
    using (var web = site.AllWebs[0]) { 
     // read-only operations 
    } 
} 

Die "myURL" ist Top-Domain-URL mit WSS 3.0. Die Authentifizierung ist auf Windows eingestellt. Wenn ich diesen Code über die Befehlszeile unter "External_app_user" -Konto ausführen, ist alles in Ordnung. Aber wenn ich diesen Code vom Webservice (außerhalb der WSS-Webapplikation) ausführe, dann ist das Ergebnis die HTTP-Antwort "401 UNAUTHORIZED" anstelle der SOAP-Antwort. Es ist seltsam, weil dieser Code im "try-catch" -Block ist, und wenn irgendeine Exception ausgelöst wird, habe ich eine eigene Fehlermeldung in der SOAP-Antwort zurückgegeben.

Der Code läuft auf demselben Computer wie WSS.

Wenn ich den Webservice von webbroser auf dem Rechner starte, auf dem der Webservice läuft, wird das klassische Windows Login-Formular angezeigt. Wenn ich den Webservice von einem Webbrowser auf einem anderen Computer aus führe, erhalte ich nur die HTTP-Antwort "401 UNAUTHORIZED".

Der Web-Service läuft unter korrektem Account. Dieses Konto hat Zugriff auf das WSS (getestet über die Sharepoint-Website). Wenn ich versuche, "System.Security.Principal.WindowsIdentity.GetCurrent(). Name" zu erhalten, wird der korrekte Benutzername zurückgegeben.

In web.config gesetzt "< identity impersonate =" true“username = "_ my_username_" password = "_ my_password_"/>.

Wer Ahnung hat, was falsch ist?

Antwort

1

Check-in könnte . IIS, wenn sowohl anonyme als auch Windows-Authentifizierung erlaubt ist, dann kann es Sie durch als anonym erlaubt, statt Ihre Fenster Identität des Lesens, die eine nicht autorisierte später führt

+0

Anonyme und Windows-Authentifizierung ist zulässig. Jetzt bekomme ich Stacktrace, und der 401 UNAUTHORIZED error bekommt von "AllWebs" -Eigenschaft bekommen. – TcKs

2

Der Grund, warum Sie die 401 nicht abfangen können, ist, weil SharePoint benutzerdefinierte Behandlung für diese Ausnahme hat, siehe diesen Thread: Cannot catch the SharePoint Access denied error (einschließlich einen Vorschlag, wie Sie es deaktivieren).

+0

+1 Es ist sehr nützlich, danke. – TcKs