André Krämers Blog

Lösungen für Ihre Probleme

Gestern überraschte mich Sharepoint mit einem mir zunächst vollkommen unverständlichen Verhalten.

Ich versuchte zu einer Seite ein WebPart hinzuzufügen, welches ich kurz davor entwickelt hatte. Jedoch kam jedes Mal nachdem ich das Webpart auswählte ein Dialog der mich zur Eingabe von Benutzernamen und Passwort aufforderte. Meine korrekt eingegebenen Benutzerdaten akzeptierte der Dialog nicht. Der Klick auf “Abbrechen” führte schließlich zu einer Standard HTTP 401 Unauthorized Seite.

Weder im Event-Log, noch in den Sharepoint-Logs konnte ich Informationen zur Fehlerursache finden.

Also folgte einige Zeit der Ratlosigkeit und des Fluchens ehe ich mehr zufällig auf die Lösung kam:

Ursache des Problems war eine fehlerhaft von mir implementierte Property meines Webparts. Diese sah ungefähr wie folgt aus:

private string pfad
public string Pfad
{
   get
   {
      return Pfad.EndsWith("/")?Pfad:string.Concat(Pfad,"/");
   }
   set
   {
      pfad = value;
   }
}

Wie man sieht habe ich einen kleinen, aber entscheidenden Fehler innerhalb des Getters. Anstatt mein Feld mit dem Namen pfad zurück zu geben, gebe ich innerhalb des Getters der Eigenschaft Pfad die Eigenschaft Pfad zurück. Somit ruft diese Eigenschaft sich so lange selber auf, bis eine StackOverflowException auftritt.

Diese StackOverflowException führte dazu, dass der Workerprozess meiner Sharepoint Web Applikation recycled wurde. Somit waren meine zuvor eingegebenen Credentials ungültig und der IIS fragte mich erneut nach den korrekten Zugangsdaten.

Nachdem ich den Getter entsprechend korrigiert hatte, lies sich das Webpart problemlos einfügen.

private string pfad
public string Pfad
{
   get
   {
      return pfad.EndsWith("/")?pfad:string.Concat(pfad,"/");
   }
   set
   {
      pfad = value;
   }
}