Provedor WMI do Reporting Services

O provedor WMI do Reporting Services foi criado com base na WMI (Instrumentação de Gerenciamento do Windows) padrão para o controle de acesso e informações de gerenciamento em um ambiente empresarial. O provedor WMI para o Reporting Services serve como um provedor de instância, mapeando os elementos de configuração XML do servidor de relatório para um conjunto de classes, que incluem métodos que você pode chamar para adicionar, remover ou modificar informações de configuração do servidor de relatório. Para obter mais informações sobre classes, consulte Biblioteca do provedor WMI do Reporting Services.

Visão geral do provedor WMI

As classes WMI estão incluídas no Reporting Services para permitir que os componentes do servidor de relatório e do Gerenciador de Relatórios sejam controlados em computadores locais e remotos, para oferecer uma forma de descobrir que máquinas da rede estão executando um serviço Web Servidor de Relatório e para ativar uma instância do servidor de relatório em uma implantação em expansão. Os administradores do sistema e os administradores de banco de dados podem usar essas classes para alterar as configurações do servidor de relatório e do Gerenciador de Relatórios após a conclusão da instalação, ou para executar tarefas de administração de servidor local ou remoto. As tarefas incluem a modificação das credenciais de conexão de banco de dados entre o servidor de relatório e o banco de dados do servidor de relatório, modificando o nome do banco de dados do servidor de relatório e alterando a URL que define o caminho de instalação para a instância do servidor de relatório ou do Gerenciador de Relatório.

As classes instaladas para dar suporte a estas funções são as seguintes:

  • O Classe MSReportServer_Instance fornece informações básicas exigidas para um cliente a ser conectado a um servidor de relatório instalado.

  • O Classe MSReportServer_ConfigurationSetting representa os parâmetros de instalação e de tempo de execução de uma instância de servidor de relatório. Esses parâmetros são armazenados no arquivo de configuração de RSReportServer.config para o servidor de relatório.

O namespace usado para obter informações sobre o Reporting Services nos exemplos de código mostrados neste tópico é System.Management, encontrado no Microsoft .NET Framework. O namespace System.Management oferece um conjunto de classes de código gerenciado pelas quais os aplicativos .NET Framework podem acessar e manipular informações de gerenciamento. Para obter mais informações sobre o uso de classes WMI do Reporting Services usando o namespace System.Management, consulte "Acessando informações de gerenciamento com System.Managment" no SDK do Microsoft .NET Framework.

Localizando uma instância do Servidor de Relatório

Se o computador tiver várias instâncias de um servidor de relatório instalado, o administrador precisa apontas para a instância exata no computador cujas propriedades estão sendo modificadas. Para localizar a instância diretamente, cada classe contém uma propriedade definida como uma chave. Essa propriedade chave identifica exclusivamente uma instalação do servidor de relatório. A propriedade definida com uma chave é a propriedade PathName. O valor dessa propriedade é o caminho para o arquivo de configuração RSReportServer.config, incluindo o nome do arquivo de configuração. Para a maioria das instalações, esse caminho seria semelhante ao seguinte exemplo:

C:\Program Files\Microsoft SQL Server\MSRS10_50.<InstanceName>\Reporting Services\ReportServer\rsreportserver.config
ObservaçãoObservação

Caracteres especiais no nome da instância O caractere de sublinhado (_) no nome da instância é transformado como “_5f” na propriedade PathName. Por exemplo:

  • Instance name = My_Instance

  • Propriedade PathName = My_5fInstance

Depois que a classe MSReportServer_ConfigurationSetting for criada, você pode preencher a chave e pesquisar o computador para localizar uma instância do servidor de relatório ou do Gerenciador de Relatório que corresponda a essa chave. Se localizada, preencha a coleção de gerenciamento com o resto dos valores a partir daquela instância.

Você também pode obter informações preenchendo uma coleção e fazendo um loop pela classe de gerenciamento para exibir as informações. Se você estiver executando este código a partir do Visual Studio .NET, adicione uma referência de projeto ao System.Management. O exemplo a seguir supõe que o arquivo de configuração RSReportServer.config está localizado em C:\Arquivos de Programas\Microsoft SQL Server\MSRS10_50.<Nome_da_instância>\Reporting Services\ReportServer\bin. As descrições dos métodos da classe System.Management podem ser encontradas no SDK do Microsoft o Visual Studio .NET.

O modo preferido de localizar informações sobre as suas instalações de servidor de relatório é enumerar pela coleção de instâncias WMI. O exemplo a seguir mostra como localizar propriedades em todas as instâncias do servidor de relatório criando uma coleção e fazendo um loop pela coleção para exibir as propriedades.

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

Para obter mais informações sobre as propriedades que podem ser lidas ou que podem ser alteradas no servidor de relatório e no Gerenciador de Relatórios, consulte Biblioteca do provedor WMI do Reporting Services. Para obter mais informações sobre as propriedades específicas do servidor de relatório, consulte Classe MSReportServer_ConfigurationSetting. Para obter informações sobre a instalação padrão dos arquivos de configuração, consulte Arquivos de configuração (Reporting Services).