Verwenden der Content Enrichment-Webdienstlegende für SharePoint Server
In diesem Artikel erfahren Sie, wie Sie den Inhaltserweiterungs-Webdienst in SharePoint implementieren, um verwaltete Eigenschaften von durchforsteten Elementen zu ändern, noch bevor die Elemente indiziert werden.
Entwickler können die Inhaltsverarbeitung in der SharePoint-Suche um einen benutzerdefinierten Schritt ergänzen, in dem die verwalteten Eigenschaften von durchforsteten Elementen noch vor der Indizierung der Elemente verändert werden. Für diesen benutzerdefinierten Schritt muss ein externer Webdienst implementiert werden, der die verwalteten Eigenschaften von Elementen noch während der Elementverarbeitung erweitern kann: der Inhaltserweiterungs-Webdienst. Anschließend muss das System so konfiguriert werden, dass dieser externe Webdienst aufgerufen wird.
Die Implementierung des Webdiensts zur Anreicherung externer Inhalte basiert auf Schnittstellen unter der Microsoft.Office. Server.Search.ContentProcessingEnrichment-Namespace.
Windows PowerShell-Cmdlets zur Verwendung mit dem Inhaltserweiterung-Webdienst
Die Funktionalität Inhaltserweiterung, konfiguriert und mit den folgenden Cmdlets Windows PowerShell aktiviert:
- Get-SPEnterpriseSearchContentEnrichmentConfiguration
- Set-SPEnterpriseSearchContentEnrichmentConfiguration
- Remove-SPEnterpriseSearchContentEnrichmentConfiguration
- New-SPEnterpriseSearchContentEnrichmentConfiguration
Diese Windows PowerShell-Cmdlets können Administratoren Folgendes konfigurieren:
- Eine benutzerdefinierte Gruppe von verwalteten Eigenschaften mit dem externen Webdienst gesendet werden.
- Eine benutzerdefinierte Gruppe von verwalteten Eigenschaften, die vom externen Webdienst zurückgegeben werden soll.
- Eine Bedingung Trigger darstellt, die ein Prädikat für jedes Element verarbeiteten ausführen. Wenn eine Bedingung für den Auslöser verwendet wird, wird der externen Webdienst aufgerufen, nur, wenn der Trigger true ausgewertet wird. Wenn die Bedingung keine Trigger verwendet wird, werden alle Elemente auf den externen Webdienst gesendet.
- Ein FailureMode, mit dem den Webdienst entweder können fehlschlagen Elemente, die können nicht verarbeitet werden, während der inhaltserweiterung Schritt oder übergeben Sie diese Elemente über ohne Änderung. Wenn die Elemente durchgeführt wurde, werden nicht indiziert und eine Warnung ausgegeben wird in den ULS-Protokolldateien geschrieben.
- Ein DebugMode, der eine schnelle Prototypen des externen Webdiensts ermöglicht. Bei Aktivierung erhält der externen Webdienst aller verfügbare verwaltete Eigenschaften. In DebugMode die Trigger-Bedingung wird ignoriert, und keine verwalteten Eigenschaften Ausgaben vom Webdienst werden ebenfalls ignoriert.
- Ein Schalter, SendRawData, die die Rohdaten eines Elements im Binärformat sendet. Dies ist nützlich, wenn mehr Metadaten erforderlich ist, als was aus der analysierten Version des Elements abgerufen werden kann.
Darüber hinaus stehen die Optionen zur Angabe der größenbeschränkungen für Nachrichten und Timeouts. Finden Sie unter Benutzerdefinierte Inhaltsverarbeitung mit dem Webdienstpopup zur Inhaltsanreicherung für eine vollständige Liste der konfigurierbaren Eigenschaften.
Voraussetzungen für das Aufrufen des Inhaltserweiterungs-Webdiensts in SharePoint
Um diese Vorgehensweise ausführen zu können, müssen Sie Folgendes in Ihrer Entwicklungsumgebung installiert sein:
- Suche in SharePoint
- Visual Studio 2010 oder ein vergleichbares Entwicklungstool, das mit .NET Framework kompatibel ist
- Administratorrechte in der SharePoint-Installation
- Ein Server, auf dem der Dienst mit IIS gehostet werden kann
Sie müssen außerdem wissen, wie zum Erstellen einer Website in IIS, und stellen Sie einen Dienst hinzu
Einrichten eines inhaltserweiterung Service-Projekts
In diesem Schritt werden Sie das Dienstprojekt Implementierung erstellen und fügen Sie die erforderlichen Verweise auf das Projekt.
So erstellen Sie das Projekt für einen Dienst inhaltserweiterung
- Wählen Sie in Visual Studio auf der Menüleiste Datei, neu, Projekt.
- Wählen Sie in Projekttypen unter Visual C#- WCF.
- Wählen Sie unter Vorlagen WCF Service-Anwendung. Klicken Sie im Feld Name Geben Sie ContentProcessingEnrichmentService, und wählen Sie dann auf die Schaltfläche OK.
- Löschen Sie die automatisch generierte Service1 -Klasse und Service1 -Schnittstelle.
So fügen Sie Verweise auf das Projekt inhaltserweiterung-Dienst hinzu
Wählen Sie im Menü Projekt Verweis hinzufügen aus.
Wählen Sie "Durchsuchen" aus, und suchen Sie die Datei "Microsoft.Office". Server.Search.ContentProcessingEnrichment-Assembly in Ihrem SharePoint Installationsordner unter Installationspfad\Microsoft Office Server\15.0\Search\Applications\External.
Hinweis
Falls SharePoint auf einem anderen Computer als dem Entwicklungscomputer installiert ist, müssen Sie die Assembly auf den Entwicklungscomputer kopieren und von dort referenzieren.
Erstellen eines Inhaltserweiterungsdiensts
Ihre Inhalte Verarbeitung Anreicherung Dienst muss die IContentProcessingEnrichmentService -Schnittstelle aus dem Microsoft.Office.Server.Search.ContentProcessingEnrichment -Namespace implementieren. Das Codebeispiel in diesem Abschnitt wird eine einfache Implementierung dieser Schnittstelle.
Die Implementierung erfordert zwei verwaltete Eigenschaften für jedes Element, das über den externen Webdienst empfangen: Author und Filename. Die Author ist eine Liste von String -Objekten und der Filename ist ein String -Objekt.
Die Implementierung IContentProcessingEnrichmentService schreibt die binären Daten an einen temporären Speicherort auf einem Datenträger mit Filename als den Namen der Datei. Klicken Sie dann ein neuer Namen in die Liste der Autoren hinzugefügt und an die inhaltsverarbeitungskomponente zurückgegeben.
Hinweis
Wenn es sich bei der Datenquelle für die Durchforstung um eine externe Datenquelle handelt, hat die ItemRawData-Eigenschaft keinen Datenstrom, ist jedoch null. Die Zeichenfolgendarstellung der Rohdaten wird in der Item.Body-Eigenschaft zurückgegeben. Dies ist eine Einschränkung des BCS-Datenquellencrawlers.
Erstellen Sie die Klassendatei für den Dienst inhaltserweiterung
- Wählen Sie im Menü PROJEKT die Option Neues Element hinzufügen aus.
- Klicken Sie unter Visual C#- unter Installierte Vorlagen wählen Sie Web, und wählen Sie dann auf WCF-Dienst.
- Geben Sie ContentProcessingEnrichmentService.svc, und wählen Sie dann auf Hinzufügen.
- Löschen Sie die IContentProcessingEnrichmentService.cs-Schnittstelle, die erstellt wird.
So ändern Sie den Standardcode in der ContentProcessingEnrichmentService-Klasse
Ersetzen Sie die vorhandenen Direktiven using durch die folgenden using Direktiven am Anfang der Klasse.
using System; using System.Collections.Generic; using System.IO; using Microsoft.Office.Server.Search.ContentProcessingEnrichment; using Microsoft.Office.Server.Search.ContentProcessingEnrichment.PropertyTypes;
Löschen Sie die DoWork -Methode.
Implementieren die IContentProcessingEnrichmentService Schnittstelle-Methode
Fügen Sie den folgenden Code innerhalb der Klasse, um die erforderlichen Konstanten und Elemente des Objekts definiert.
// 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>() };
Fügen Sie den folgenden Code für die ProcessItem -Methode.
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; }
Ändern web.config akzeptieren von Nachrichten bis zu 8 MB, und konfigurieren Sie readerQuotas, um eine ausreichend große Zahl sein.
Fügen Sie Folgendes in
<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>
Erstellen Sie das Projekt, und stellen Sie es auf Ihrer IIS-Website bereit.
Konfigurieren von SharePoint
Öffnen Sie die SharePoint-Verwaltungsshell, und geben Sie die folgende Sequenz von Windows PowerShell-Cmdlets.
$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
Die Abfolge der Windows PowerShell-Cmdlets können Sie zunächst ein Konfigurationsobjekt erstellen, mit dem Cmdlet New-SPEnterpriseSearchContentEnrichmentConfiguration . Configuration-Objekts wird anschließend in Richtung der Service-Implementierung verwiesen; als bewährte Methode verwenden Sie http://localhost:808
für Site_URL.
Die verwalteten Eigenschaften Author und Filename werden an den Dienst für jedes Element gesendet, die verarbeitet wird. Darüber hinaus haben Sie die Webdienstclients darüber informiert, dass der Dienst eine einzelne verwaltete Eigenschaft Author ausgegeben wird. In ist zusätzlich zu verwalteten Eigenschaften WebClient-Dienst konfiguriert die Rohdaten des Elements mit einer Einschränkung auf die Größe der Daten senden. Schließlich wird das Cmdlet Set-SPEnterpriseSearchContentEnrichmentConfigurationverwendet, um die gesamte Konfiguration zu speichern. Nachdem dieses Cmdlet zurückgibt, wird die Konfiguration aktiv ist, und die Durchforstungskomponente verwendet diese Konfiguration für den nächsten Durchforstungsvorgang.
Nachdem dieser Schritt abgeschlossen ist, können Sie eine vollständige Durchforstung der Website beginnen. Wenn der Dienst ordnungsgemäß funktioniert, sollten Sie überwachen Sie den temporären Ordner auf dem Server mit der Website für die Dokumente geschrieben werden auf dem Datenträger.
Sie können die Konfiguration später mit dem folgenden Cmdlet Windows PowerShell entfernen.
Remove-SPEnterpriseSearchContentEnrichmentConfiguration -SearchApplication $ssa