HTTP Fehler: Unautorized

Hallo Zusammen,


ich habe ein Problem mit meiner Anwendung, die ich für das Löschen der Datensätze von Entität Invoice geschrieben habe. An meinem Arbeitsplatz läuft das Programm problemlos und löscht alle aktive Rechnungen. Nun muss das auch an anderem Arbeitsplatz sowie beim Kunden laufen. Läuft aber nicht. Ich bekomme folgende Fehlermeldung: Die Anforderung ist mit HTTP-Statuscode 401 fehlgeschlagen: Unautorized.


Die Anwendung ist in C# geschrieben. Die Credentials ist wie folgt definiert:


CrmService service = new CrmService();


service.Credentials = System.Net.CredentialCache.DefaultCredentials;


und ich habe die URL in delete.exe.config entsprechend angepasst. Wenn ich diese URL im Internet Explorer an anderem Arbeitsplatz ausführe,bekomme ich die CRMServices angezeigt. An diese Stelle liegt es nicht. Die Fehlermeldung kommt später, wenn ich service.Delete aufrufe.


Hat jemand  eine Idee, woran das liegen kann? Ich wäre dafür sehr dankbar.


Mit freundlichen Grüßen


Nadja Fink



AW: HTTP Fehler: Unautorized

Hallo Nadja,


die Vermutung liegt nahe, dass der Versuch scheitert, da die Methode des CRM-Webservice ohne ausreichende Berechtigungen gerufen wird. Den Webservice im Browser anzeigen lassen kann sich - wenn ich mich nicht sehr irre - erst mal jeder Benutzer.


Zwei Ideen hätte ich um dem Fehler näher auf dem Grund zu gehen:



  1. Vom IIS werden erweiterte HTTP-Statuscodes bereitgestellt (401.x), wenn es um Auth-Probleme geht. Hier könnte Selbiger Aufschluss geben, warum konkret der Zugriff abgelehnt wird.
  2. Statt den DefaultCredentials, wo durch impersonation der aktuelle Benutzer ermittelt wird (O-Ton nach MSDN: DefaultCredentials entsprechen den Systemanmeldeinformationen für den aktuellen Sicherheitskontext, in dem die Anwendung ausgeführt wird. Bei einer clientseitigen Anwendung sind dies i. d. R. die Windows-Anmeldeinformationen des Benutzers, der die Anwendung ausführt, d. h. Benutzername, Kennwort und Domäne. Bei ASP.NET-Anwendungen sind die Standardanmeldeinformationen die Anmeldeinformationen des derzeit angemeldeten Benutzers bzw. des Benutzers, dessen Identität verwendet wird.) würde ich testweise im Programm eigene NetworkCredentials mit einem definitiv im CRM privilegiertem Benutzer instanziieren und damit versuchen die betreffende Funktion aufzurufen.
    Wie das programmatisch bewerkstelligt wird kann man aus diesem Beispiel ableiten.

Viele Grüße und viel Erfolg,
Thomas