Sdílet prostřednictvím


Postupy: Ladění aplikace SharePoint s použitím technologie IntelliTrace

Pomocí technologie IntelliTrace lze snadněji ladit řešení služby SharePoint.Tradiční ladící programy dávají pouze náhled na řešení v aktuálním okamžiku.Technologii IntelliTrace lze použít k přezkoumání minulých událostí, k nimž v řešení došlo a kontextu, ve kterém nastaly, a tento kód vyhledat.

Tento návod ukazuje, jak pomocí agenta sledování společnosti Microsoft ladit projekt SharePoint 2010 nebo SharePoint 2013 v systému Visual Studio Ultimate a shromažďovat data technologie IntelliTrace o nasazených aplikacích.Chcete-li analyzovat data, je nutné použít systém Visual Studio Ultimate.Tento projekt zahrnuje příjemce funkce, která když je aktivní, přidá úkol do seznamu úkolů a oznámení do seznamu oznámení.Když je tato funkce deaktivována, je úkol označen jako dokončený a druhé oznámení je přidáno do seznamu oznámení.Postup však obsahuje logickou chybu, která brání správnému spuštění projektu.Pomocí technologie IntelliTrace lze tuto chybu vyhledat a opravit.

Platí pro: Informace v tomto tématu se vztahují na řešení služby SharePoint 2010 a SharePoint 2013, které byly vytvořeny v systému Visual Studio.

Tento návod ilustruje následující úkoly:

  • Vytvoření příjemce funkce

  • Přidání kódu do příjemce funkce

  • Testování projektu

  • Shromažďování dat technologie IntelliTrace pomocí agenta sledování společnosti Microsoft.

  • Ladění a opravy řešení služby SharePoint

[!POZNÁMKA]

Na vašem počítači se můžou v následujících pokynech zobrazovat jiné názvy nebo umístění některých prvků uživatelského rozhraní Visual Studia. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Požadavky

Chcete-li dokončit tento návod, potřebujete následující komponenty:

Vytvoření příjemce funkce

Nejprve vytvořte prázdný projekt SharePoint, který má příjemce funkce.

Vytvoření příjemce funkce

  1. Vytvořte projekt řešení služby SharePoint 2010 nebo SharePoint 2013 s názvem IntelliTraceTest.

    Zobrazí se Průvodce přizpůsobením služby SharePoint, ve kterém lze zadat web vašeho projektu služby SharePoint a úroveň důvěryhodnosti tohoto řešení.

  2. Zvolte přepínač Nasadit jako řešení farmy a poté klikněte na tlačítko Dokončit.

    Technologie IntelliTrace funguje pouze s řešením farmy.

  3. V Průzkumníku řešení otevřete místní nabídku uzlu Funkce a poté zvolte Přidat funkci.

    Zobrazí se funkce Feature1.feature.

  4. Otevřete místní nabídku funkce Feature1.feature a poté zvolte Přidat příjemce události, což do funkce přidá modul kódu.

Přidání kódu do příjemce funkce

Dále přidejte kód do dvou metod v příjemci funkce, FeatureActivated a FeatureDeactivating.Tyto metody se spustí, kdykoli je ve službě SharePoint funkce aktivována nebo deaktivována.

Přidání kódu do příjemce funkce

  1. Do horní části třídy Feature1EventReceiver přidejte následující kód deklarující proměnné, které určují web a podřízený web služby SharePoint:

    ' SharePoint site and subsite.
    Private siteUrl As String = "https://localhost"
    Private webUrl As String = "/"
    
    // SharePoint site and subsite.
    private string siteUrl = "https://localhost";
    private string webUrl = "/";
    
  2. Nahraďte metodu FeatureActivated následujícím kódem:

    Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists.
                    Dim announcementsList As SPList = web.Lists("Announcements")
                    Dim taskList As SPList = web.Lists("Tasks")
    
                    ' Add an announcement to the Announcements list.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Activated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(properties.Definition.DisplayName) & " was activated on: " & DateTime.Now.ToString()
                    listItem.Update()
    
                    ' Add a task to the Task list.
                    Dim newTask As SPListItem = taskList.Items.Add()
                    newTask("Title") = "Deactivate feature: " & Convert.ToString(properties.Definition.DisplayName)
                    newTask.Update()
                End Using
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    
    End Sub
    
    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. Nahraďte metodu FeatureDeactivating následujícím kódem:

    Public Overrides Sub FeatureDeactivating(ByVal properties As SPFeatureReceiverProperties)
        ' The following line induces an error to demonstrate debugging.
        ' Remove this line later for proper operation.
        Throw New System.InvalidOperationException("Serious error occurred!")
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists.
                    Dim taskList As SPList = web.Lists("Tasks")
                    Dim announcementsList As SPList = web.Lists("Announcements")
    
                    ' Add an announcement that the feature was deactivated.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Deactivated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(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.
                    Dim qry As New SPQuery()
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactivate</Value></Contains></Where>"
                    Dim taskItems As SPListItemCollection = taskList.GetItems(qry)
    
                    For Each taskItem As SPListItem In taskItems
                        ' Mark the task as complete.
                        taskItem("PercentComplete") = 1
                        taskItem("Status") = "Completed"
                        taskItem.Update()
                    Next
                End Using
    
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    
    
    End Sub
    
    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());
        }
    }
    

Testování projektu

Nyní když je kód přidán do příjemce funkce a sběr dat je spuštěn, nasaďte a spusťte řešení služby SharePoint, abyste ověřili, zda funguje správně.

Důležitá poznámkaDůležité

V tomto příkladu dojde k vyvolání chyby v obslužné rutině události FeatureDeactivating.Dále v tomto návodu tuto chybu vyhledáte pomocí souboru .iTrace, který sběr dat vytvořil.

Otestování projektu

  1. Nasaďte řešení služby SharePoint a poté otevřete web služby SharePoint v prohlížeči.

    Funkce se automaticky aktivuje, což způsobí, že její příjemce funkce přidá oznámení a úlohu.

  2. Zobrazte obsah seznamů oznámení a úlohy.

    Seznam oznámení by měl mít nové oznámení s názvem Aktivace funkce: IntelliTraceTest_Feature1 a seznam úkolů by měl mít nový úkol s názvem Deaktivace funkce: IntelliTraceTest_Feature1.Pokud některá z těchto položek chybí, zkontrolujte, zda je funkce aktivována.Pokud není aktivována, aktivujte ji.

  3. Deaktivujte funkci podle následujících kroků:

    1. V nabídce Akce webu služby SharePoint, vyberte Nastavení webu.

    2. V části Akce webu zvolte odkaz Spravovat funkce webu.

    3. Vedle IntelliTraceTest Feature1 klikněte na tlačítko Deaktivovat.

    4. Na stránce Upozornění, klikněte na odkaz Deaktivovat tuto funkci.

    Obslužná rutina události FeatureDeactivating() vyvolá chybu.

Shromažďování dat technologie IntelliTrace pomocí agenta sledování společnosti Microsoft

Pokud nainstalujete agenta sledování společnosti Microsoft do systému, ve kterém běží služba SharePoint, lze řešení služby SharePoint ladit pomocí dat, která jsou konkrétnější než obecné informace, které technologie IntelliTrace vrací.Tento agent pracuje mimo systém Visual Studio pomocí rutin prostředí PowerShell k zachycení informací o ladění při běhu řešení služby SharePoint.

[!POZNÁMKA]

Informace o konfiguraci v této části je specifická pro tento příklad.Další informace o jiných možnostech konfigurace naleznete v tématu Shromažďování diagnostických dat za provozu pomocí samostatného nástroje pro shromažďování dat IntelliTrace.

  1. V počítači, ve kterém běží služba SharePoint nastavte agenta sledování společnosti Microsoft a začněte řešení sledovat.

  2. Deaktivujte funkci:

    1. V nabídce Akce webu služby SharePoint, vyberte Nastavení webu.

    2. V části Akce webu zvolte odkaz Spravovat funkce webu.

    3. Vedle IntelliTraceTest Feature1 klikněte na tlačítko Deaktivovat.

    4. Na stránce Upozornění, klikněte na odkaz Deaktivovat tuto funkci.

    Dojde k chybě (v tomto případě z důvodu chyby v obslužné rutině události FeatureDeactivating()).

  3. V okně prostředí PowerShell spusťte příkaz Stop-WebApplicationMonitoring, čímž vytvoříte soubor .iTrace, zastavíte sledování a znovu spustíte řešení služby SharePoint.

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

Ladění a opravy řešení služby SharePoint

Soubor protokolu technologie IntelliTrace lze nyní zobrazit v systému Visual Studio a najít a opravit chyby v řešení služby SharePoint.

Ladění a opravy řešení služby SharePoint

  1. V systému Visual Studio ve složce \IntelliTraceLogs otevřete soubor .iTrace.

    Zobrazí se stránka Souhrn technologie IntelliTrace.Vzhledem k tomu, že chyba nebyla zpracována, zobrazí se korelační ID (GUID) služby SharePoint v oblasti neošetřených výjimek v části Analýza.Klikněte na tlačítko Zásobník volání, pokud chcete zobrazit zásobník volání, kde došlo k chybě.

  2. Klikněte na tlačítko Ladit výjimku.

    Pokud se zobrazí výzva, načtěte soubory symbolů.Výjimka je v okně IntelliTrace zvýrazněna jako "Vyvolaná: Došlo k závažné chybě!".

    V okně IntelliTrace zvolte výjimky, chcete-li zobrazit kód, který se nezdařil.

  3. Opravte chybu otevřením řešení služby SharePoint a poté buď zakomentujte nebo odeberte příkaz throw v horní části procedury FeatureDeactivating().

  4. Znovu v systému Visual Studio sestavte řešení a poté jej znovu nasaďte na web služby SharePoint.

  5. Deaktivujte funkci podle následujících kroků:

    1. V nabídce Akce webu služby SharePoint, vyberte Nastavení webu.

    2. V části Akce webu zvolte odkaz Spravovat funkce webu.

    3. Vedle IntelliTraceTest Feature1 klikněte na tlačítko Deaktivovat.

    4. Na stránce Upozornění, klikněte na odkaz Deaktivovat tuto funkci.

  6. Otevřete seznam úkolů a ověřte, zda hodnota Stav deaktivovaného úkolu je „Dokončeno“ a jeho hodnota Dokončeno % je 100 %.

    Kód nyní pracuje správně.

Viz také

Koncepty

Zobrazení a ladění kódu pro SharePoint

Ladění aplikace pomocí zaznamenávání provádění kódu s použitím technologie IntelliTrace

Další zdroje

Názorný postup: Ověřte kód služby SharePoint pomocí zkoušky jednotky