Freigeben über


Schritt 5: Implementieren des Handlers zum Suchen nach Metadaten für den Echo-Adapter

Schritt 5 von 9

Abgeschlossene Zeit: 30 Minuten

In diesem Schritt des Tutorials implementieren Sie die Suchfunktion des Echoadapters. Im Gegensatz zum Durchsuchen ist die Suche optional. Gemäß dem WCF LOB Adapter SDK müssen Sie die Schnittstelle implementieren, um die Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler Suchfunktion zu unterstützen. Für den Echoadapter generiert der Adapterentwicklungs-Assistent automatisch eine abgeleitete Klasse namens EchoAdapterMetadataSearchHandler.

Sie aktualisieren zuerst die EchoAdapterMetadataSearchHandler-Klasse, um ein besseres Verständnis der Implementierung dieser Schnittstelle, des Auffüllens Microsoft.ServiceModel.Channels.MetadataRetrievalNode von Objekten und der Darstellung der Suchergebnisse im Tool Adapterdienstverweis-Plug-In hinzufügen zu erhalten.

Voraussetzungen

Bevor Sie mit diesem Schritt beginnen, führen Sie Schritt 4: Implementieren des Metadatenstöberhandlers für den Echoadapter aus. Außerdem müssen Sie über ein klares Verständnis der folgenden Klassen verfügen:

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNode

  • Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections

Die IMetadataSearchHandler-Schnittstelle

Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler ist wie folgt definiert:

public interface IMetadataSearchHandler : IConnectionHandler, IDisposable  
{  
    MetadataRetrievalNode[] Search(string nodeId, string searchCriteria, int maxChildNodes, TimeSpan timeout);  
}  

Die Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A -Methode gibt ein Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten basierend auf den Suchkriterien zurück. Die Parameterdefinitionen für die Search-Methode werden in der folgenden Tabelle beschrieben:

Parameter Definition
nodeId Die Knoten-ID, von der aus die Suche gestartet werden soll. Wenn NULL oder eine leere Zeichenfolge (""), werden Vorgänge vom Stammknoten ("/") abgerufen.
searchCriteria Die Suchkriterien, die adapterspezifisch sind. Wenn keine Suchkriterien angegeben sind, sollte der Adapter alle Knoten zurückgeben.
maxChildNodes Die maximale Anzahl von Ergebnisknoten, die zurückgegeben werden sollen. Verwenden Sie Int32.Max, um alle Ergebnisknoten abzurufen.

Vom Echo-Adapter nicht unterstützt.
timeout Die maximal zulässige Zeit für den Abschluss des Vorgangs.

Vom Echo-Adapter nicht unterstützt.

Für das Suchergebnis kann Ihr Adapter entweder Kategorieknoten oder Vorgangsknoten oder beides zurückgeben. Es hängt vom Typ der Suchfunktion ab, die Ihr Adapter unterstützt.

Abhängig von den Kategorien und Vorgängen Ihres Zielsystems gibt es viele Möglichkeiten, ein Array von Objekten zu erstellen, die Microsoft.ServiceModel.Channels.MetadataRetrievalNode zurückgegeben werden sollen. Die Art und Weise, wie echo adapter die Suchfunktion implementiert, besteht darin, jeden Vorgang mit seiner Knoten-ID in der folgenden Liste zu durchlaufen:

Echo/OnReceiveEcho, inbound operation  
Echo/EchoStrings, outbound operation  
Echo/EchoGreetings, outbound operation  
Echo/EchoGreetingFromFile, outbound operation  
  • Wenn die Knoten-ID dann mit den Suchkriterien übereinstimmt, erstellt sie mithilfe der Knoten-ID des Vorgangs ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt und weist dann die Eigenschaften mit Werten zu. Beispiel:

    MetadataRetrievalNode nodeInbound = new MetadataRetrievalNode("Echo/OnReceiveEcho"); //create the MetadataRetrievalNode using the operation's node ID.  
    nodeInbound.DisplayName = "OnReceiveEcho"; //The Display Name shown in the Name column of the Add Adapter Service Reference Visual Studio Plug-in  
    nodeInbound.Description = "This operation echoes the location and length of a file dropped in the specified file system.";  //The Description shown as the tool tip in the Add Adapter Service Visual Studio Plug-in  
    nodeInbound.Direction = MetadataRetrievalNodeDirections.Inbound;    //It is an inbound operation  
    nodeInbound.IsOperation = true;  //It is an operation, not category.  
    
  • Und fügen Sie das -Objekt dann einer Auflistung der Microsoft.ServiceModel.Channels.MetadataRetrievalNodes hinzu, z. B.

    resultList.Add(nodeInbound);  
    
  • Abschließend wird die Auflistung in einem Arrayformat zurückgegeben.

    return resultList.ToArray();  
    

    Sie können die Add-Ins Adapter Service Reference Plug-In und Use Adapter Service Add-In verwenden, um eine verbindungsbasierte Suche nach den verfügbaren Vorgängen durchzuführen. Die folgende Abbildung zeigt z. B., dass die Suche die Vorgänge EchoGreetings und EchoGreetingFromFile zurückgibt, wenn die Suchkriterien die Zeichenfolge Greeting sind.

    Screenshot des Dialogfelds Adapterdienstverweis hinzufügen

    Wenn keine Übereinstimmung gefunden wird, gibt eines der tools die in der folgenden Abbildung dargestellte Fehlermeldung zurück.

    Screenshot: Fehler, der zurückgegeben wird, wenn keine Übereinstimmung gefunden wird

Implementieren des IMetadataSearchHandler

Sie implementieren die Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A Methode der Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler Schnittstelle. Wenn der Anzeigename des Vorgangs mit den Suchkriterien übereinstimmt, erstellen Sie ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für diesen Vorgang und fügen dieses Objekt dann einem Array der Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekte hinzu.

So aktualisieren Sie die EchoAdapterMetadataSearchHandler-Klasse

  1. Doppelklicken Sie in Projektmappen-Explorer auf die Datei EchoAdapterMetadataSearchHandler.cs.

  2. Ersetzen Sie im Visual Studio-Editor in der Search-Methode die vorhandene Logik durch Folgendes. Diese Logik erstellt ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt, wenn Echo/OnReceiveEcho den angegebenen Suchkriterien entspricht.

    List<MetadataRetrievalNode> resultList = new List<MetadataRetrievalNode>();  
    if ("OnReceiveEcho".ToLower().Contains(searchCriteria.ToLower()))  
    {  
        MetadataRetrievalNode nodeInbound = new MetadataRetrievalNode("Echo/OnReceiveEcho");  
        nodeInbound.DisplayName = "OnReceiveEcho";  
        nodeInbound.Description = "This operation echoes the location and length of a file dropped in the specified file system.";  
        nodeInbound.Direction = MetadataRetrievalNodeDirections.Inbound;  
        nodeInbound.IsOperation = true;  
        resultList.Add(nodeInbound);  
    }  
    
  3. Fügen Sie die folgende Logik hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt zu erstellen, wenn Echo/EchoStrings den angegebenen Suchkriterien entspricht.

    if ("EchoStrings".ToLower().Contains(searchCriteria.ToLower()))  
    {  
        MetadataRetrievalNode outOpNode1 = new MetadataRetrievalNode("Echo/EchoStrings");  
        outOpNode1.DisplayName = "EchoStrings";  
        outOpNode1.Description = "This operation echoes the incoming string COUNT number of times in a string array.";  
        outOpNode1.Direction = MetadataRetrievalNodeDirections.Outbound;  
        outOpNode1.IsOperation = true;  
        resultList.Add(outOpNode1);  
    }  
    
  4. Fügen Sie die folgende Logik hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt zu erstellen, wenn Echo/EchoGreetings den angegebenen Suchkriterien entspricht.

    if ("EchoGreetings".ToLower().Contains(searchCriteria.ToLower()))  
        {  
            MetadataRetrievalNode outOpNode2 = new MetadataRetrievalNode("Echo/EchoGreetings");  
            outOpNode2.DisplayName = "EchoGreetings";  
            outOpNode2.Description = "This operation echoes the incoming Greeting object COUNT number of times in an array of type Greeting.";  
            outOpNode2.Direction = MetadataRetrievalNodeDirections.Outbound;  
            outOpNode2.IsOperation = true;  
            resultList.Add(outOpNode2);  
        }  
    
  5. Fügen Sie den folgenden Code hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt zu erstellen, wenn Echo/EchoGreetingFromFile den angegebenen Suchkriterien entspricht.

    if ("EchoCustomGreetingFromFile".ToLower().Contains(searchCriteria.ToLower()))  
    {  
        MetadataRetrievalNode outOpNode3 = new MetadataRetrievalNode("Echo/EchoCustomGreetingFromFile");  
        outOpNode3.DisplayName = "EchoCustomGreetingFromFile";  
        outOpNode3.Description = "This operation echoes the greeting object by reading its instance from a file. The Greeting object's metadata is obtained from a predefined XSD file.";  
        outOpNode3.Direction = MetadataRetrievalNodeDirections.Outbound;  
        outOpNode3.IsOperation = true;  
        resultList.Add(outOpNode3);  
    }  
    
  6. Fügen Sie den folgenden Code hinzu, um ein Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten zurückzugeben.

    return resultList.ToArray();  
    
  7. Klicken Sie in Visual Studio im Menü Datei auf Alle speichern.

  8. Klicken Sie im Menü Erstellen auf Projektmappe erstellen. Sie sollten das Projekt erfolgreich kompiliert haben. Wenn nicht, stellen Sie sicher, dass Sie alle oben genannten Schritte ausgeführt haben.

    Hinweis

    Sie haben Ihre Arbeit gespeichert. Sie können Visual Studio zu diesem Zeitpunkt sicher schließen oder mit dem nächsten Schritt fortfahren, Schritt 6: Implementieren des Metadatenlösehandlers für den Echoadapter.

Was habe ich nur getan?

Sie haben gerade die Metadatensuchfunktion des Echo-Adapters implementiert, indem Sie die Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A Methode der Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler Schnittstelle implementiert haben. Insbesondere haben Sie ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode -Objekt für jeden Vorgang erstellt, der den Kriterien entspricht, und dann ein Array der Microsoft.ServiceModel.Channels.MetadataRetrievalNode -Objekte zurückgegeben.

Nächste Schritte

Sie implementieren die Funktion zum Auflösen von Metadaten sowie die Funktionen für den Austausch ausgehender und eingehender Nachrichten. Schließlich erstellen Und bereitstellen Sie den Echo-Adapter.

Weitere Informationen

Schritt 4: Implementieren des Handlers zum Durchsuchen von Metadaten für den Echo-Adapter
Schritt 6: Implementieren des Handlers zum Löschen von Metadaten für den Echo-Adapter
Tutorial 1: Entwickeln des Echo-Adapters