Compartir a través de


Usar el servicio web de enriquecimiento de contenidos para SharePoint Server

Aprenda a implementar el servicio web Content Enrichment en SharePoint para modificar las propiedades administradas de los elementos rastreados antes de que sean indexados.

La búsqueda en SharePoint permite a los desarrolladores agregar un paso personalizado al procesamiento de contenido para modificar las propiedades administradas de los elementos rastreados antes de indexarlos. En este paso personalizado requiere la implementación de un servicio web externo--el servicio web de enriquecimiento de contenido--que puede enriquecer las propiedades administradas de los elementos que se está procesados; y, a continuación, configurar el sistema para llamar a este servicio web externo.

La implementación del servicio web de enriquecimiento de contenido externo se basa en interfaces del espacio de nombres Microsoft.Office.Server.Search.ContentProcessingEnrichment .

Cmdlets de Windows PowerShell para usar con el servicio web de enriquecimiento de contenido

La funcionalidad de enriquecimiento de contenido está configurada y habilitada con los cmdlets de Windows PowerShell siguientes:

Estos cmdlets Windows PowerShell que un administrador pueda configurar lo siguiente:

  • Un conjunto personalizado de las propiedades administradas que se envíen al servicio web externo.
  • Un conjunto personalizado de las propiedades administradas que será devuelto por el servicio web externo.
  • Una condición de desencadenador, que representa un predicado para ejecutar para cada elemento que se está procesando. Si se usa una condición de desencadenador, el servicio web externo se llama sólo cuando el desencadenador se evalúa como true. Si no se usa ninguna condición de desencadenador, todos los elementos se envían al servicio web externo.
  • Un FailureMode que permite al servicio web cualquiera producirá un error en los elementos que no se puede procesar durante el paso de enriquecimiento de contenido o pasan estos elementos a través de sin ninguna modificación. Si se produce un error en los elementos, no están indizadas y se escribe una advertencia en el registro de ULS.
  • Un DebugMode, que permite la creación rápida de prototipos del servicio web externo. Cuando se habilita, el servicio web externo recibe todas las propiedades administradas disponibles. En DebugMode, se omite la condición de activación y los resultados de las propiedades administradas por el servicio web también se omiten.
  • Un modificador de SendRawData que envía los datos sin procesar de un elemento en formato binario. Esto es útil cuando se necesita más metadatos que lo que se puede recuperar desde la versión analizada del elemento.

Además, hay opciones para especificar los límites de tamaño y tiempos de espera. Consulte Procesamiento de contenido personalizado con la llamada del servicio web enriquecimiento de contenido para obtener una lista completa de las propiedades configurables.

Requisitos previos para usar la llamada del servicio web de enriquecimiento de contenido para SharePoint

Para completar este tutorial, debe tener instalado en su entorno de desarrollo lo siguiente:

  • Buscar en SharePoint
  • Visual Studio 2010 o similar .NET Framework - herramienta de desarrollo compatible
  • Privilegios de administrador en la instalación de SharePoint
  • Un servidor en el que puede hospedar el servicio con IIS

También debe saber cómo crear un sitio en IIS e implementar un servicio a ella

Configurar un proyecto de servicio de enriquecimiento de contenido

En este paso, se crea el proyecto de implementación de servicio y, a continuación, agregar las referencias necesarias al proyecto.

Para crear el proyecto para un servicio de enriquecimiento de contenido

  1. En Visual Studio, en la barra de menús, elija archivo, nuevo, proyecto.
  2. En tipos de proyecto, en Visual C#, elija WCF.
  3. En plantillas, elija Aplicación de servicio WCF. En el campo nombre, escriba ContentProcessingEnrichmentService y, a continuación, elija el botón Aceptar.
  4. Eliminar la interfaz de clase y Service1 generado automáticamente Service1.

Para agregar referencias al proyecto de servicio de enriquecimiento de contenido

  1. En el menú Proyecto, elija Agregar referencia.

  2. Elija Examinar y busque el ensamblado Microsoft.Office.Server.Search.ContentProcessingEnrichment en la carpeta de instalación de SharePoint en Ruta de instalación\Microsoft Office Servers\15.0\Search\Applications\External.

    Nota:

    [!NOTA] Si SharePoint está instalado en un equipo distinto del equipo de desarrollo, copie el ensamblado sobre a su equipo de desarrollo y hacer referencia a él desde allí.

Crear un servicio de enriquecimiento de contenido

El servicio de enriquecimiento de procesamiento de contenido debe implementar la interfaz de IContentProcessingEnrichmentService desde el espacio de nombres Microsoft.Office.Server.Search.ContentProcessingEnrichment . El ejemplo de código de esta sección es una implementación básica de esta interfaz.

La implementación requiere dos propiedades administradas para cada elemento recibido a través del servicio web externo: Author y Filename. El Author es una lista de objetos de String y el Filename es un objeto String.

La implementación de IContentProcessingEnrichmentService escribe los datos binarios sin procesar en una ubicación temporal en el disco, con Filename como el nombre del archivo. A continuación, un nombre nuevo agregado a la lista de autores y vuelvan al componente de procesamiento de contenido.

Nota:

Si el origen de datos para el rastreo es un origen de datos externo, la propiedad ItemRawData no tendrá un flujo de datos, pero será null. La representación de cadena de los datos sin procesar se devolverá en la propiedad Item.Body. Se trata de una limitación del rastreador del origen de datos BCS.

Para crear el archivo de clase para el servicio de enriquecimiento de contenido

  1. En el menú Proyecto, elija Agregar nuevo elemento.
  2. En Visual C# en Plantillas instaladas, seleccione Web y, a continuación, elija Servicio WCF.
  3. Escriba ContentProcessingEnrichmentService.svc y, a continuación, elija Agregar.
  4. Eliminar la interfaz de IContentProcessingEnrichmentService.cs que se crea.

Para modificar el código de forma predeterminada en la clase ContentProcessingEnrichmentService

  1. Reemplace las directivas using existente con las siguientes directivas de using al principio de la clase.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using Microsoft.Office.Server.Search.ContentProcessingEnrichment;
    using Microsoft.Office.Server.Search.ContentProcessingEnrichment.PropertyTypes;
    
  2. Elimine el método DoWork.

Para implementar el método de la interfaz de IContentProcessingEnrichmentService

  1. Agregue el código siguiente dentro de la clase para definir las constantes necesarios y los miembros.

    // Defines the name of the managed property 'Filename'.
    private const string FileNameProperty = "Filename";
    
    // Defines the name of the managed property 'Author'
    private const string AuthorProperty = "Author";
    
    // Defines the temporary directory where binary data will be stored.
    private const string TempDirectory = @"C:\\Temp";
    
    // Defines the error code for managed properties with an unexpected type.
    private const int UnexpectedType = 1;
    
    // Defines the error code for encountering unexpected exceptions.
    private const int UnexpectedError = 2;
    
    private readonly ProcessedItem processedItemHolder = new ProcessedItem
    {
       ItemProperties = new List<AbstractProperty>()
    };
    
  2. Agregue el siguiente código para el método ProcessItem.

    public ProcessedItem ProcessItem(Item item)
    {
       processedItemHolder.ErrorCode = 0;
       processedItemHolder.ItemProperties.Clear();
       try
       {
          // Iterate over each property received and locate the two properties we
          // configured the system to send.
          foreach (var property in item.ItemProperties)
          {
             // Check if this is the author property.
             if (property.Name.Equals(AuthorProperty, StringComparison.Ordinal))
             {
                var author = property as Property<List<string>>;
                if (author == null)
                {
                   // The author property was not of the expected type.
                   // Update the error code and return.
                      processedItemHolder.ErrorCode = UnexpectedType;
                      return processedItemHolder;
                }
                   // Adding a new author to the list so it will become searchable.
                      author.Value.Add("ExampleService");
                      processedItemHolder.ItemProperties.Add(author);
             }
             else if (property.Name.Equals(FileNameProperty, StringComparison.Ordinal))
             {
                var filename = property as Property<string>;
                if (filename == null)
                {
                   // The file name property was not of the expected type.
                   // Update error code and return.
                      processedItemHolder.ErrorCode = UnexpectedType;
                      return processedItemHolder;
                }
                if (!string.IsNullOrEmpty(filename.Value))
                {
                   var fullFilePath = string.Join(char.ToString(Path.DirectorySeparatorChar), TempDirectory, filename.Value);
                   if (item.RawData != null)
                   {
                      var outputFile = File.Create(fullFilePath);
                      using (var writer = new BinaryWriter(outputFile))
                      {
                         writer.Write(item.RawData);
                      }
                   }
                }
             }
          }
       }
       catch (Exception)
       {
          processedItemHolder.ErrorCode = UnexpectedError;
       } return processedItemHolder;
    }
    
  3. Modificar web.config para aceptar mensajes de hasta 8 MB y a continuación, configure readerQuotas para que sea un valor lo suficientemente grande.

  4. Agregue lo siguiente dentro de <system.serviceModel>.

    <bindings>
       <basicHttpBinding>
       <!-- The service will accept a maximum blob of 8 MB. -->
          <binding maxReceivedMessageSize = "8388608">
             <readerQuotas maxDepth="32"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
                 <security mode="None" />
          </binding>
       </basicHttpBinding>
    </bindings>
    

Genere el proyecto y lo implementa en el sitio IIS.

Configuración de SharePoint

Abra la Shell de administración de SharePoint y a continuación, escriba la siguiente secuencia de cmdlets de Windows PowerShell.

$ssa = Get-SPEnterpriseSearchServiceApplication
$config = New-SPEnterpriseSearchContentEnrichmentConfiguration
$config.Endpoint = http://Site_URL/ContentEnrichmentService.svc
$config.InputProperties = "Author", "Filename"
$config.OutputProperties = "Author"
$config.SendRawData = $True
$config.MaxRawDataSize = 8192
Set-SPEnterpriseSearchContentEnrichmentConfiguration -SearchApplication
$ssa -ContentEnrichmentConfiguration $config

La secuencia de cmdlets de Windows PowerShell le ayuda a crear primero un objeto de configuración mediante el cmdlet New-SPEnterpriseSearchContentEnrichmentConfiguration. El objeto de configuración, a continuación, apunte hacia la implementación del servicio; como práctica recomendada, use http://localhost:808 para Site_URL.

Las propiedades administradas Author y Filename se envían a su servicio para cada elemento que se está procesando. Además, ha informado que el cliente de servicio web que el servicio dará como resultado una única propiedad administrada, Author. En adicionales a las propiedades administradas, el cliente del servicio web está configurado para enviar los datos sin procesar del elemento con una limitación del tamaño de los datos. Por último, el cmdlet Set-SPEnterpriseSearchContentEnrichmentConfigurationse usa para almacenar toda la configuración. Después de este cmdlet devuelve, la configuración está activa y el componente de rastreo usa esta configuración para su próximo proceso de rastreo.

Después de finalizar, puede iniciar un rastreo completo de su sitio. Si el servicio funciona correctamente, debe ser capaz de supervisar la carpeta temporal en el servidor que hospeda el sitio para los documentos que se escriben en el disco.

Puede quitar la configuración más adelante mediante el siguiente cmdlet de Windows PowerShell.

Remove-SPEnterpriseSearchContentEnrichmentConfiguration -SearchApplication $ssa

Vea también