Procedura dettagliata: Eseguire il debug di un'applicazione SharePoint usando IntelliTrace

Usando IntelliTrace, è possibile eseguire più facilmente il debug di soluzioni SharePoint. I debugger tradizionali offrono solo uno snapshot di una soluzione al momento corrente. Tuttavia, è possibile usare IntelliTrace per esaminare gli eventi passati che si sono verificati nella soluzione e il contesto in cui si sono verificati e passare al codice.

Questa procedura dettagliata illustra come eseguire il debug di un progetto SharePoint in Visual Studio usando Microsoft Monitoring Agent per raccogliere dati IntelliTrace dalle applicazioni distribuite. Per analizzare i dati, è necessario usare Visual Studio Enterprise. Questo progetto incorpora un ricevitore di funzionalità che, quando la funzionalità viene attivata, aggiunge un'attività all'elenco Attività e un annuncio all'elenco Annunci. Quando la funzionalità viene disattivata, l'attività viene contrassegnata come completata e un secondo annuncio viene aggiunto all'elenco Annunci. Tuttavia, la procedura contiene un errore logico che impedisce l'esecuzione corretta del progetto. Usando IntelliTrace, si individua e si corregge l'errore.

Si applica a: le informazioni contenute in questo argomento si applicano alle soluzioni SharePoint create in Visual Studio.

In questa procedura dettagliata sono illustrati i task seguenti:

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei componenti seguenti:

  • Edizioni supportate di Windows e SharePoint.

  • Visual Studio Enterprise.

Creare un ricevitore di funzionalità

Prima di tutto, si crea un progetto SharePoint vuoto con un ricevitore di funzionalità.

  1. Creare un progetto di soluzione SharePoint destinato alla versione di SharePoint installata e denominarla IntelliTraceTest.

    Viene visualizzata la Personalizzazione guidata SharePoint, in cui è possibile specificare sia il sito di SharePoint per il progetto che il livello di attendibilità della soluzione.

  2. Scegliere il pulsante di opzione Distribuisci come soluzione farm e quindi scegliere il pulsante Fine .

    IntelliTrace opera solo su soluzioni farm.

  3. In Esplora soluzioni aprire il menu di scelta rapida per il nodo Funzionalità e quindi scegliere Aggiungi funzionalità.

    Viene visualizzata feature1.feature .

  4. Aprire il menu di scelta rapida per Feature1.feature e quindi scegliere Aggiungi ricevitore di eventi per aggiungere un modulo di codice alla funzionalità.

Aggiungere codice al ricevitore di funzionalità

Aggiungere quindi il codice a due metodi nel ricevitore della funzionalità: FeatureActivated e FeatureDeactivating. Questi metodi vengono attivati ogni volta che una funzionalità viene attivata o disattivata rispettivamente in SharePoint.

  1. Nella parte superiore della Feature1EventReceiver classe aggiungere il codice seguente, che dichiara le variabili che specificano il sito e il sito secondario di SharePoint:

    // SharePoint site and subsite.
    private string siteUrl = "http://localhost";
    private string webUrl = "/";
    
  2. Sostituire il metodo FeatureActivated con il codice seguente:

    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. Sostituire il metodo FeatureDeactivating con il codice seguente:

    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());
        }
    }
    

Testare il progetto

Ora che il codice viene aggiunto al ricevitore di funzionalità e l'agente di raccolta dati è in esecuzione, distribuire ed eseguire la soluzione SharePoint per verificare se funziona correttamente.

Importante

Per questo esempio, viene generato un errore nel gestore eventi FeatureDeactivating. Più avanti in questa procedura dettagliata si individua questo errore usando il file con estensione iTrace creato dall'agente di raccolta dati.

  1. Distribuire la soluzione in SharePoint e quindi aprire il sito di SharePoint in un browser.

    La funzionalità viene attivata automaticamente, causando il relativo ricevitore di funzionalità di aggiungere un annuncio e un'attività.

  2. Visualizzare il contenuto degli elenchi Annunci e attività.

    L'elenco Annunci dovrebbe avere un nuovo annuncio denominato Funzionalità attivata: IntelliTraceTest_Feature1 e l'elenco Attività deve avere una nuova attività denominata Disattiva funzionalità: IntelliTraceTest_Feature1. Se uno di questi elementi non è presente, verificare se la funzionalità è attivata. Se non è attivato, attivarlo.

  3. Disattivare la funzionalità eseguendo la procedura seguente:

    1. Nel menu Azioni sito in SharePoint scegliere Impostazioni sito.

    2. In Azioni sito scegliere il collegamento Gestisci funzionalità del sito.

    3. Accanto a IntelliTraceTest Feature1 scegliere il pulsante Disattiva .

    4. Nella pagina Avviso scegliere il collegamento Disattiva questa funzionalità .

      Il gestore eventi FeatureDeactivating() genera un errore.

Raccogliere dati IntelliTrace tramite Microsoft Monitoring Agent

Se si installa Microsoft Monitoring Agent nel sistema che esegue SharePoint, è possibile eseguire il debug di soluzioni SharePoint usando dati più specifici delle informazioni generica restituite da IntelliTrace. L'agente funziona all'esterno di Visual Studio usando i cmdlet di PowerShell per acquisire informazioni di debug durante l'esecuzione della soluzione SharePoint.

Nota

Le informazioni di configurazione in questa sezione sono specifiche di questo esempio. Per altre informazioni sulle altre opzioni di configurazione, vedere Uso dell'agente di raccolta autonomo IntelliTrace.

  1. Nel computer che esegue SharePoint configurare Microsoft Monitoring Agent e iniziare a monitorare la soluzione.

  2. Disattivare la funzionalità:

    1. Nel menu Azioni sito in SharePoint scegliere Impostazioni sito.

    2. In Azioni sito scegliere il collegamento Gestisci funzionalità del sito.

    3. Accanto a IntelliTraceTest Feature1 scegliere il pulsante Disattiva .

    4. Nella pagina Avviso scegliere il collegamento Disattiva questa funzionalità .

      Si verifica un errore (in questo caso, a causa dell'errore generato nel gestore eventi FeatureDeactivating().

  3. Nella finestra di PowerShell eseguire il comando Stop-WebApplicationMonitoring per creare il file con estensione iTrace, arrestare il monitoraggio e riavviare la soluzione SharePoint.

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

Eseguire il debug e correggere la soluzione SharePoint

È ora possibile visualizzare il file di log in IntelliTrace in Visual Studio per trovare e correggere l'errore nella soluzione SharePoint.

  1. Nella cartella \IntelliTraceLogs aprire il file con estensione iTrace in Visual Studio.

    Viene visualizzata la pagina Riepilogo IntelliTrace. Poiché l'errore non è stato gestito, viene visualizzato un ID di correlazione di SharePoint (GUID) nell'area eccezione non gestita della sezione Analisi . Scegliere il pulsante Stack di chiamate se si desidera visualizzare lo stack di chiamate in cui si è verificato l'errore.

  2. Scegliere il pulsante Debug eccezione .

    Se richiesto, caricare i file di simboli. Nella finestra IntelliTrace l'eccezione viene evidenziata come "Thrown: Serious error occurred!".

    Nella finestra IntelliTrace scegliere l'eccezione per visualizzare il codice non riuscito.

  3. Correggere l'errore aprendo la soluzione SharePoint e quindi commentando o rimuovendo l'istruzione throw nella parte superiore della routine FeatureDeactivating().

  4. Ricompilare la soluzione in Visual Studio e quindi ridistribuirla in SharePoint.

  5. Disattivare la funzionalità eseguendo la procedura seguente:

    1. Nel menu Azioni sito in SharePoint scegliere Impostazioni sito.

    2. In Azioni sito scegliere il collegamento Gestisci funzionalità del sito.

    3. Accanto a IntelliTraceTest Feature1 scegliere il pulsante Disattiva .

    4. Nella pagina Avviso scegliere il collegamento Disattiva questa funzionalità .

  6. Aprire l'elenco Attività e verificare che il valore Stato dell'attività Disattiva sia "Completato" e che il relativo valore % Complete sia 100%.

    Il codice viene ora eseguito correttamente.