Proveedor WMI de Reporting Services

El proveedor WMI de Reporting Services está integrado en la tecnología de Instrumental de administración de Windows (WMI) estándar destinada al control de acceso y la información de administración en un entorno empresarial. El proveedor WMI para Reporting Services actúa como un proveedor de instancias, asignando los elementos de configuración XML del servidor de informas a un conjunto de clases, que incluyen métodos a los que puede llamar para agregar, quitar o modificar la información de configuración del servidor de informes. Para obtener más información sobre las clases, vea Biblioteca de proveedores WMI de Reporting Services.

Introducción al proveedor WMI

Las clases WMI se incluyen en Reporting Services para poder controlar los componentes del Administrador de informes y el servidor de informes en equipos remotos y locales, proporcionar una manera de detectar qué equipos de la red que ejecutan un servicio web del servidor de informes y activar una instancia del servidor de informes en una implementación escalada. Los administradores del sistema y de bases de datos pueden utilizar estas clases para realizar cambios en las configuraciones del servidor de informes y el Administrador de informes una vez completada la instalación, o realizar tareas de administración de servidores remotos o locales. Las tareas son, por ejemplo, modificar las credenciales de la conexión a bases de datos entre el servidor de informes y la base de datos del servidor de informes, modificar el nombre de la base de datos del servidor de informes y cambiar la dirección URL que define la ruta de instalación a la instancia del servidor de informes o el Administrador de informes.

Las clases que se instalan para admitir estas funciones son las siguientes:

  • Clase MSReportServer_Instance proporciona la información básica requerida para que un cliente se conecte a un servidor de informes instalado.

  • Clase MSReportServer_ConfigurationSetting representa la instalación y los parámetros de tiempo de ejecución de una instancia del servidor de informes. Estos parámetros están almacenados en el archivo de configuración RSReportServer.config para el servidor de informes.

El espacio de nombres utilizado para obtener información sobre Reporting Services en los ejemplos de código mostrados en este tema es System.Management, que se encuentra en Microsoft .NET Framework. El espacio de nombres System.Management proporciona un conjunto de clases de código administrado a través de las que las aplicaciones de .NET Framework pueden obtener acceso y tratar la información de administración. Para obtener más información sobre cómo utilizar las clases WMI de Reporting Services con el espacio de nombres System.Management, vea la sección sobre el acceso a la información de administración con System.Managment en Microsoft .NET Framework SDK.

Buscar una instancia del servidor de informes

Si el equipo tiene instaladas varias instancias de un servidor de informes, el administrador necesita señalar a la instancia exacta en el equipo cuyas propiedades se modifican. Para buscar directamente la instancia, cada clase contiene una propiedad que se define como una clave. Esta propiedad clave identifica de forma única una instalación del servidor de informes. La propiedad definida como una clave es PathName. El valor de esta propiedad es la ruta de acceso al archivo de configuración RSReportServer.config, incluido el nombre. En la mayoría de las instalaciones, esta ruta de acceso sería similar a la del ejemplo siguiente:

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

Nota

Caracteres especiales en un nombre de instancia El carácter de subrayado (_) en el nombre de instancia se transforma en “_5f” en la propiedad PathName. Por ejemplo:

  • Nombre de instancia = My_Instance

  • Propiedad PathName= My_5fInstance

Una vez creada la clase MSReportServer_ConfigurationSetting, puede rellenar la clave y buscar en el equipo una instancia del servidor de informes o del Administrador de informes que coincida con esa clave. Si la encuentra, rellene la colección de administración con el resto de los valores de esa instancia.

También puede obtener información rellenando una colección y recorriendo la clase de administración para mostrar la información. Si está ejecutando este código desde Visual Studio .NET, agregue una referencia al proyecto a System.Management. El ejemplo siguiente supone que el archivo de configuración de RSReportServer.config se encuentra en C:\Archivos de programa\Microsoft SQL Server\MSRS10_50.<nombreDeInstancia>\Reporting Services\ReportServer\bin. Las descripciones de los métodos en la clase System.Management se pueden encontrar en Microsoft Visual Studio .NET SDK.

La mejor manera de buscar información sobre las instalaciones del servidor de informes es enumerar en la colección de instancias WMI. En el ejemplo siguiente se muestra cómo encontrar las propiedades en cada instancia del servidor de informes creando una colección y recorriéndola para mostrarlas.

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 obtener más información sobre las propiedades que se pueden leer o cambiar en el servidor de informes y el Administrador de informes, vea Biblioteca de proveedores WMI de Reporting Services. Para obtener más información sobre las propiedades concretas del servidor de informes, vea Clase MSReportServer_ConfigurationSetting. Para obtener información sobre la instalación predeterminada de los archivos de configuración, vea Archivos de configuración (Reporting Services).