Exemplarische Vorgehensweise: Debuggen einer SharePoint-Anwendung mithilfe von IntelliTrace

Mit IntelliTrace können Sie SharePoint-Lösungen einfacher debuggen. Herkömmliche Debugger erstellen lediglich eine aktuelle Momentaufnahme der Lösung. Sie können mithilfe von IntelliTrace jedoch in der Lösung aufgetretene Ereignisse sowie den Kontext, in dem sie aufgetreten sind, überprüfen und zum Code navigieren.

Diese exemplarische Vorgehensweise veranschaulicht, wie ein SharePoint-Projekt in Visual Studio debuggt wird, indem Sie Microsoft Monitoring Agent verwenden, um IntelliTrace-Daten bereitgestellter Anwendungen zu sammeln. Zum Analysieren dieser Daten muss Visual Studio Enterprise verwendet werden. Dieses Projekt integriert einen Funktionsempfänger, der bei aktivierter Funktion der Liste „Aufgaben“ eine Aufgabe und der Liste „Ankündigungen“ eine Ankündigung hinzufügt. Wenn die Funktion deaktiviert wird, wird die Aufgabe als abgeschlossen gekennzeichnet, und der Liste "Ankündigungen" wird eine zweite Ankündigung hinzugefügt. Die Prozedur enthält jedoch einen logischen Fehler, der verhindert, dass das Projekt ordnungsgemäß ausgeführt wird. Mit IntelliTrace können Sie den Fehler suchen und korrigieren.

Gilt für: Die Informationen in diesem Artikel beziehen sich auf SharePoint-Lösungen, die in Visual Studio erstellt wurden.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

Voraussetzungen

Zum Abschließen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

  • Unterstützte Editionen von Windows und SharePoint.

  • Visual Studio Enterprise

Erstellen eines Featureempfängers

Erstellen Sie zunächst ein leeres SharePoint-Projekt mit einem Funktionsempfänger.

  1. Erstellen Sie ein SharePoint-Lösungsprojekt für die Version von SharePoint, die Sie installiert haben, und nennen Sie es IntelliTraceTest.

    Der Assistent zum Anpassen von SharePoint wird angezeigt, in dem Sie die SharePoint-Website für Ihr Projekt und die Vertrauensebene der Projektmappe angeben können.

  2. Klicken Sie auf das Optionsfeld Als Farmlösung bereitstellen und dann auf Fertig stellen.

    IntelliTrace kann nur für Farmlösungen verwendet werden.

  3. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für den Knoten Features, und wählen Sie anschließend Feature hinzufügen aus.

    Feature1.feature wird angezeigt.

  4. Öffnen Sie das Kontextmenü für „Feature1.feature“, und wählen Sie anschließend Ereignisempfänger hinzufügen aus, um dem Feature ein Codemodul hinzuzufügen.

Hinzufügen von Code zum Featureempfänger

Fügen Sie anschließend zwei Methoden im Funktionsempfänger Code hinzu: FeatureActivated und FeatureDeactivating. Diese Methoden lösen immer dann aus, wenn eine Funktion in SharePoint aktiviert bzw. deaktiviert wird.

  1. Fügen Sie am Anfang der Feature1EventReceiver-Klasse den folgenden Code hinzu, um Variablen zu deklarieren, mit denen die SharePoint-Website und -Unterwebsite angegeben werden:

    // SharePoint site and subsite.
    private string siteUrl = "http://localhost";
    private string webUrl = "/";
    
  2. Ersetzen Sie die FeatureActivated-Methode durch folgenden Code:

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList announcementsList = web.Lists["Announcements"];
                    SPList taskList = web.Lists["Tasks"];
    
                    // Add an announcement to the Announcements list.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Activated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was activated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Add a task to the Task list.
                    SPListItem newTask = taskList.Items.Add();
                    newTask["Title"] = "Deactivate feature: " + properties.Definition.DisplayName;
                    newTask.Update();
                }
            }
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    
    }
    
  3. Ersetzen Sie die FeatureDeactivating-Methode durch folgenden Code:

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        // The following line induces an error to demonstrate debugging.
        // Remove this line later for proper operation.
        throw new System.InvalidOperationException("A serious error occurred!");
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList taskList = web.Lists["Tasks"];
                    SPList announcementsList = web.Lists["Announcements"];
    
                    // Add an announcement that the feature was deactivated.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Deactivated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was deactivated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Find the task that the feature receiver added to the Task list when the
                    // feature was activated.
                    SPQuery qry = new SPQuery();
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactivate</Value></Contains></Where>";
                    SPListItemCollection taskItems = taskList.GetItems(qry);
    
                    foreach (SPListItem taskItem in taskItems)
                    {
                        // Mark the task as complete.
                        taskItem["PercentComplete"] = 1;
                        taskItem["Status"] = "Completed";
                        taskItem.Update();
                    }
                }
            }
    
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    }
    

Testen des Projekts

Wenn dem Funktionsempfänger der Code hinzugefügt wurde und der Datensammler ausgeführt wird, stellen Sie die SharePoint-Lösung bereit. Führen Sie sie aus, um die ordnungsgemäße Funktion zu testen.

Wichtig

In diesem Beispiel wird ein Fehler im Ereignishandler „FeatureDeactivating“ ausgelöst. Im weiteren Verlauf dieser exemplarischen Vorgehensweise suchen Sie diesen Fehler anhand der vom Datensammler erstellten .iTrace-Datei.

  1. Stellen Sie die Lösung für SharePoint bereit, und öffnen Sie die SharePoint-Website in einem Browser.

    Die Funktion wird automatisch aktiviert. Dadurch wird bewirkt, dass der Funktionsempfänger eine Ankündigung und eine Aufgabe hinzufügt.

  2. Zeigen Sie den Inhalt der Listen mit Ankündigungen und Aufgaben an.

    In der Liste „Ankündigungen“ sollte nun eine neue Ankündigung mit dem Namen Activated feature: IntelliTraceTest_Feature1 aufgeführt werden, und in der Liste „Aufgaben“ eine neue Aufgabe mit dem Namen Deactivate feature: IntelliTraceTest_Feature1. Wenn eines der Elemente fehlt, überprüfen Sie, ob die Funktion aktiviert ist. Aktivieren Sie sie andernfalls.

  3. Deaktivieren Sie die Funktion, indem Sie die folgenden Schritte ausführen:

    1. Klicken Sie in SharePoint im Menü Websiteaktionen auf Websiteeinstellungen.

    2. Klicken Sie unter Websiteaktionen auf den Link Websitefeatures verwalten.

    3. Klicken Sie neben IntelliTraceTest Feature1 auf die Schaltfläche Deaktivieren.

    4. Wählen Sie auf der Seite „Warnungen“ den Link Dieses Feature deaktivieren.

      Vom Ereignishandler „FeatureDeactivating()“ wird ein Fehler ausgelöst.

Sammeln von IntelliTrace-Daten mithilfe von Microsoft Monitoring Agent

Wenn Sie Microsoft Monitoring Agent auf dem System installieren, auf dem SharePoint ausgeführt wird, können Sie SharePoint-Lösungen debuggen, indem Sie spezifischere Daten verwenden, als die von IntelliTrace zurückgegebenen generischen Informationen. Der Agent funktioniert außerhalb von Visual Studio, indem PowerShell-Cmdlets verwendet werden, um Debuginformationen zu sammeln, während die SharePoint-Lösung ausgeführt wird.

Hinweis

Die Konfigurationsinformationen in diesem Abschnitt beziehen sich auf dieses Beispiel. Weitere Informationen zu anderen Konfigurationsoptionen finden Sie unter Verwenden des eigenständigen IntelliTrace-Collectors.

  1. Richten Sie auf dem Computer, auf dem SharePoint ausgeführt wird, Microsoft Monitoring Agent ein, und beginnen Sie damit, Ihre Lösung zu überwachen.

  2. Deaktivieren Sie die Funktion:

    1. Klicken Sie in SharePoint im Menü Websiteaktionen auf Websiteeinstellungen.

    2. Klicken Sie unter Websiteaktionen auf den Link Websitefeatures verwalten.

    3. Klicken Sie neben IntelliTraceTest Feature1 auf die Schaltfläche Deaktivieren.

    4. Wählen Sie auf der Seite „Warnungen“ den Link Dieses Feature deaktivieren.

      Ein Fehler tritt auf (in diesem Fall aufgrund des Fehlers im Ereignishandler "FeatureDeactivating()").

  3. Führen Sie im PowerShell-Fenster den Befehl Stop-WebApplicationMonitoring aus, um die ITRACE-Datei zu erstellen, beenden Sie die Überwachung, und starten Sie die SharePoint-Lösung neu.

    Stop-WebApplicationMonitoring"<SharePointSite>\<SharePointAppName>"

Debuggen und Korrigieren der SharePoint-Lösung

Jetzt können Sie die IntelliTrace-Protokolldatei in Visual Studio anzeigen, um den Fehler in der SharePoint-Lösung zu suchen und zu beheben.

  1. Öffnen Sie im Ordner "\IntelliTraceLogs" die ITRACE-Datei-Datei in Visual Studio.

    Die Seite IntelliTrace-Zusammenfassung wird angezeigt. Da es sich um einen Ausnahmefehler handelt, wird eine SharePoint-Korrelations-ID (eine GUID) im Ausnahmefehlerbereich des Abschnitts Analyse angezeigt. Wählen Sie die Schaltfläche Aufrufliste aus, um die Aufrufliste anzuzeigen, in der der Fehler aufgetreten ist.

  2. Wählen Sie die Schaltfläche Debugausnahme aus.

    Wenn Sie dazu aufgefordert werden, laden Sie Symboldateien. Im Fenster IntelliTrace wird angezeigt, dass die Ausnahme vom Typ „schwerwiegender Fehler“ aufgetreten ist.

    Wählen Sie die Ausnahme im IntelliTrace-Fenster aus, um den Code mit dem Fehler anzuzeigen.

  3. Beheben Sie den Fehler, indem Sie die SharePoint-Lösung öffnen und die throw-Anweisung am Anfang der Prozedur „FeatureDeactivating()“ auskommentieren oder entfernen.

  4. Erstellen Sie die Projektmappe in Visual Studio neu, und stellen Sie sie dann erneut für SharePoint bereit.

  5. Deaktivieren Sie die Funktion, indem Sie die folgenden Schritte ausführen:

    1. Klicken Sie in SharePoint im Menü Websiteaktionen auf Websiteeinstellungen.

    2. Klicken Sie unter Websiteaktionen auf den Link Websitefeatures verwalten.

    3. Klicken Sie neben IntelliTraceTest Feature1 auf die Schaltfläche Deaktivieren.

    4. Wählen Sie auf der Seite „Warnungen“ den Link Dieses Feature deaktivieren.

  6. Öffnen Sie die Liste „Aufgaben“, und überprüfen Sie, ob der Wert Status der Aufgabe „Deactivate“ jetzt ordnungsgemäß auf „Abgeschlossen“ festgelegt ist, und der Wert % Complete jetzt „100 %“ beträgt.

    Der Code wird jetzt ordnungsgemäß ausgeführt.