Provider WMI di Reporting Services

Il provider WMI per Reporting Services è basato sulla tecnologia WMI (Strumentazione gestione Windows) standard per il controllo dell'accesso e la gestione delle informazioni in un ambiente aziendale. Il provider WMI per Reporting Services funge da provider di istanze e consente di eseguire il mapping degli elementi di configurazione XML del server di report a un set di classi, che includono metodi che è possibile chiamare per aggiungere, rimuovere o modificare le informazioni di configurazione del server di report. Per ulteriori informazioni sulle classi, vedere Libreria del provider WMI per Reporting Services.

Cenni preliminari sul provider WMI

Le classi WMI sono incluse in Reporting Services per consentire il controllo dei componenti del server di report e di Gestione report nei computer locali e remoti, per semplificare l'individuazione dei computer nella rete in cui è in esecuzione un servizio Web ReportServer e per attivare un'istanza del server di report in una distribuzione con scalabilità orizzontale. Gli amministratori di sistema e di database possono utilizzare queste classi per apportare modifiche alle configurazioni del server di report e di Gestione report dopo il completamento dell'installazione oppure per eseguire attività di amministrazione dei server locali o remote. Le attività includono la modifica delle credenziali di connessione al database tra il server di report e il database del server di report, la modifica del nome del database del server di report e la modifica dell'URL che definisce il percorso di installazione dell'istanza del server di report o di Gestione report.

Le classi installate per supportare queste funzioni sono le seguenti:

  • La classe Classe MSReportServer_Instance fornisce le informazioni di base necessarie per la connessione di un client a un server di report installato.

  • La classe Classe MSReportServer_ConfigurationSetting rappresenta i parametri di installazione e runtime di un'istanza del server di report. Questi parametri sono archiviati nel file di configurazione RSReportServer.config per il server di report.

Lo spazio dei nomi utilizzato per ottenere informazioni su Reporting Services negli esempi di codice di questo argomento è lo spazio dei nomi System.Management, disponibile in Microsoft .NET Framework. Lo spazio dei nomi System.Management fornisce un set di classi di codice gestito tramite il quale le applicazioni .NET Framework possono accedere alle informazioni di gestione e modificare tali informazioni. Per ulteriori informazioni sull'utilizzo delle classi WMI di Reporting Services tramite lo spazio dei nomi System.Management, vedere l'argomento relativo all'accesso alle informazioni di gestione con System.Managment in Microsoft .NET Framework SDK.

Individuazione di un'istanza del server di report

Se nel computer sono installate più istanze di un server di report, l'amministratore deve puntare all'istanza esatta nel computer di cui vengono modificate le proprietà. Per individuare direttamente l'istanza, ogni classe contiene una proprietà definita come chiave. Questa proprietà chiave identifica in modo univoco un'installazione del server di report. La proprietà definita come chiave è PathName. Il valore di questa proprietà indica il percorso del file di configurazione RSReportServer.config, incluso il nome di tale file. Per la maggior parte delle installazioni, questo percorso è simile all'esempio seguente:

C:\Program Files\Microsoft SQL Server\MSRS10_50.<InstanceName>\Reporting Services\ReportServer\rsreportserver.config

Nota

Caratteri speciali nel nome dell'istanza Il carattere di sottolineatura (_) nel nome dell'istanza viene trasformato in "_5f" nella proprietà PathName. Ad esempio:

  • Nome istanza = My_Instance

  • Proprietà PathName = My_5fInstance

Dopo la creazione della classe MSReportServer_ConfigurationSetting, è possibile popolare la chiave e cercare nel computer un'istanza del server di report o di Gestione report corrispondente a tale chiave. Se l'istanza viene individuata, è possibile popolare la raccolta di gestione con il resto dei valori di tale istanza.

È inoltre possibile ottenere informazioni popolando una raccolta ed eseguendo un ciclo nella classe di gestione per visualizzare le informazioni. Se si esegue questo codice da Visual Studio .NET, aggiungere un riferimento al progetto a System.Management. Nell'esempio riportato di seguito si presuppone che il file di configurazione RSReportServer.config si trovi in C:\Program Files\Microsoft SQL Server\MSRS10_50.<InstanceName>\Reporting Services\ReportServer\bin. Le descrizioni per i metodi della classe System.Management sono disponibili in Microsoft Visual Studio .NET SDK.

Il metodo migliore per individuare le informazioni nelle installazioni del server di report consiste nell'eseguire un'enumerazione nella raccolta di istanze WMI. Nell'esempio seguente viene illustrato come individuare le proprietà in ogni istanza del server di report creando una raccolta ed eseguendo un ciclo al suo interno per visualizzare le proprietà.

Imports System
Imports System.Management
Imports System.IO

Module Module1
    Sub Main()
        Const WmiNamespace As String = "\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v10\Admin"
        Const WmiRSClass As String = _
           "\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v10\admin:MSReportServer_ConfigurationSetting"

        Dim serverClass As ManagementClass
        Dim scope As ManagementScope
        scope = New ManagementScope(WmiNamespace)
        'Connect to the Reporting Services namespace.
        scope.Connect()

        'Create the server class.
        serverClass = New ManagementClass(WmiRSClass)
        'Connect to the management object.
        serverClass.Get()
        If serverClass Is Nothing Then Throw New Exception("No class found")

        'Loop through the instances of the server class.
        Dim instances As ManagementObjectCollection = serverClass.GetInstances()
        Dim instance As ManagementObject
        For Each instance In instances
            Console.Out.WriteLine("Instance Detected")
            Dim instProps As PropertyDataCollection = instance.Properties
            Dim prop As PropertyData
            For Each prop In instProps
                Dim name As String = prop.Name
                Dim val As Object = prop.Value
                Console.Out.Write("Property Name: " + name)
                If val Is Nothing Then
                    Console.Out.WriteLine("     Value: <null>")
                Else
                    Console.Out.WriteLine("     Value: " + val.ToString())
                End If
            Next
        Next

        Console.WriteLine("--- Press any key ---")
        Console.ReadKey()


    End Sub
End Module
using System;
using System.Management;
using System.IO;
[assembly: CLSCompliant(true)]

class Class1
{
    [STAThread]
    static void Main(string[] args)
    {
        const string WmiNamespace = @"\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v10\Admin";
        const string WmiRSClass =
          @"\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v10\admin:MSReportServer_ConfigurationSetting";
        ManagementClass serverClass;
        ManagementScope scope;
        scope = new ManagementScope(WmiNamespace);

        // Connect to the Reporting Services namespace.
        scope.Connect();
        // Create the server class.
        serverClass = new ManagementClass(WmiRSClass);
        // Connect to the management object.
        serverClass.Get();
        if (serverClass == null)
            throw new Exception("No class found");

        // Loop through the instances of the server class.
        ManagementObjectCollection instances = serverClass.GetInstances();

        foreach (ManagementObject instance in instances)
        {
            Console.Out.WriteLine("Instance Detected");
            PropertyDataCollection instProps = instance.Properties;
            foreach (PropertyData prop in instProps)
            {
                string name = prop.Name;
                object val = prop.Value;
                Console.Out.Write("Property Name: " + name);
                if (val != null)
                    Console.Out.WriteLine("     Value: " + val.ToString());
                else
                    Console.Out.WriteLine("     Value: <null>");
            }
        }
        Console.WriteLine("\n--- Press any key ---");
        Console.ReadKey();
    }
}

Per ulteriori informazioni sulle proprietà che è possibile leggere o modificare nel server di report e in Gestione report, vedere Libreria del provider WMI per Reporting Services. Per ulteriori informazioni sulle proprietà specifiche del server di report, vedere Classe MSReportServer_ConfigurationSetting. Per informazioni sull'installazione predefinita dei file di configurazione, vedere File di configurazione (Reporting Services).