Der Code ist ziemlich einfach --- das Problem ist, dass ein ungültiges Zeichen in der groupPath-Zeichenfolge (ein '/' um genau zu sein).
Was ich versuche zu tun (zumindest als Stop-Lücke) ist das Überspringen von DirectoryEntries, für die ich die cn nicht bekommen kann --- egal warum.
Aber wenn ich diesen Code ausführe, läuft der catch-Block nicht und ich bekomme stattdessen: Der Server ist nicht betriebsbereit. und eine unbehandelte System.Runtime.InteropServices.COMException.
Warum würde der catch-Block diese Ausnahme nicht abfangen?
%Vor%Zusätzliche Beobachtungen: Der Code befindet sich tatsächlich in einem benutzerdefinierten RoleProvider, und das Interessante daran ist, dass, wenn ich diesen Provider in einer einfachen Winforms-App referenziere und dieselbe Methode mit den gleichen Eingaben aufruft, der catch-Block genau das tut, was er tun soll. Ich denke, dies deutet darauf hin, dass die vorgeschlagene Antwort zu .NET-Ausnahmen und COM-Ausnahmen nicht korrekt ist. Obwohl ich nicht verstehen kann, warum dieser Code beim Ausführen vom WebDev-Server nicht abfangen würde
Wenn Sie nicht festlegen, was abgefangen werden soll, werden standardmäßig .NET-Ausnahmen verwendet. Ihre Ausnahme ist in COM, wo .NET nicht festgelegt ist, um die Ausnahme abzufangen. Der beste Weg, damit umzugehen, ist, die COM-Ausnahme zu fangen, die ungefähr so aussehen sollte:
%Vor%Es gibt drei Gründe:
Persönlich stimme ich für 3, und ich hatte unzählige Debugging-Sitzungen, wo ich mich frage, warum ein Teil des Codes meine Ausnahmen nicht behandelt, während Visual Studio tatsächlich so konfiguriert war, dass er bei allen geworfenen Ausnahmen stoppt ob sie gefangen wurden oder nicht.
Haben Sie versucht, das Programm einfach zu fragen, ob es im Debugger weiterläuft und ob es dann im Catch-Block landet?
Überprüfen Sie auch die Einstellung in Visual Studio, gehen Sie zum Dialogfeld Debug & Ausnahmen; prüfen Sie, ob eines der Kontrollkästchen ausgelöst aktiviert ist. Wenn Sie haben, könnte das Ihr Problem sein.
Natürlich, wenn Sie dieses Problem zur Laufzeit sehen, kein Debugger angefügt, dann habe ich keine Ahnung, außer für Punkt 1 und 2 oben.
Und natürlich gibt es immer Punkt 4: Das Unbekannte.
Entlang der COMException gibt es auch asynchrone Ausnahmen, die NICHT gefangen werden, wie zB:
Sind Sie sicher, dass das nicht der Fall ist?
Ich hatte ein ähnliches Problem. Ich habe ein VB6-COM-Objekt aufgerufen, das einen Fehler ausgelöst hat. Der tatsächliche Ausnahmetyp stellte sich als System.Reflection.TargetInvocationException heraus. Die innere Ausnahme wurde auf die COMException festgelegt. Am Ende habe ich die System.Reflection.TargetInvocationException abgefangen und die innere Ausnahmebedingung
überprüftTags und Links .net c# directoryservices roleprovider