Freigeben über


Schritt 4: Implementierung des Metadaten-Browse-Handlers für den Echo-Adapter

Schritt 4 von 9

Zeit bis zum Abschluss: 45 Minuten

In diesem Schritt implementieren Sie die Suchfunktion des Echo-Adapters. Mit dieser Funktion kann der Adapter eine verbindungsbasierte Suche durchführen, um Metadaten aus dem Zielsystem abzurufen. Unabhängig von den Funktionen Ihres Adapters muss der Adapter die Suchfunktion unterstützen.

Gemäß dem WCF LOB Adapter SDK müssen Sie die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler Schnittstelle implementieren, um die Durchsuchungsfunktion zu unterstützen. Für den Echoadapter generiert der Adapterentwicklungs-Assistent automatisch die abgeleitete Klasse "EchoAdapterMetadataBrowseHandler".

In den folgenden Schritten aktualisieren Sie diese Klasse, um ein besseres Verständnis für die Implementierung der Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A Methode, das Festlegen verschiedener Eigenschaften des Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekts und die Darstellung der vom Adapter unterstützten Vorgangs- und Kategorieknoten im Add Adapter Service Reference Plug-In-Tool zu erhalten.

Voraussetzungen

Bevor Sie diesen Schritt beginnen, müssen Sie Schritt 3 erfolgreich abgeschlossen haben : Implementieren der Verbindung für den Echoadapter. Sie müssen auch die folgenden Klassen verstehen:

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNode

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections

  • Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler

Die IMetadataBrowseHandler-Schnittstelle

Die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler Schnittstelle wird wie folgt definiert:

public interface IMetadataBrowseHandler : IConnectionHandler, IDisposable  
{  
    MetadataRetrievalNode[] Browse(string nodeId, int childStartIndex, int maxChildNodes, TimeSpan timeout);  
}  

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

Hinweis

Die Echoadapterimplementierung verwendet nur die Knoten-ID und ignoriert die anderen drei Parameter, da der Echo-Adapter nur wenige Knoten unterstützt.

Parameter Definition
nodeId Jedes Element in der Hierarchie des Metadaten-Explorers (das Add Adapter Service Reference Plug-In und

Das Add-In "Consume Adapter Service Add-in" verfügt über eine nodeId. Jede Knoten-ID muss eindeutig sein und kann eine Kategorie oder ein Vorgang sein. Die Kategorie kann Unterkategorien aufweisen. Anmerkung: Wenn NULL oder eine leere Zeichenfolge (""), werden Vorgänge standardmäßig aus dem Stammknoten ("/") abgerufen.
Kindstartindex Der Index des ersten untergeordneten Elements, das zurückzugeben ist.

Vom Echoadapter nicht unterstützt.
maxChildNodes Die maximale Anzahl von Ergebnisknoten, die zurückgegeben werden sollen. Verwenden Sie Int32.Max, um alle Ergebnisknoten abzurufen.

Vom Echoadapter nicht unterstützt.
Zeitüberschreitung Die maximal zulässige Zeit für den Abschluss des Vorgangs.

Vom Echoadapter nicht unterstützt.

Bei der Implementierung der Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A Methode müssen Sie jeden Kategorie- und Vorgangsknoten dem Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten hinzufügen. Wenn Sie einen Knoten als Kategorie angeben möchten, legen Sie den Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2A auf false fest. Um einen Knoten als Vorgang festzulegen, setzen Sie Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2A auf true.

Echo-Adapter-Metadaten durchsuchen

Abhängig von den Kategorien und Vorgängen ihres Zielsystems gibt es viele Möglichkeiten, ein Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten zu erstellen. Die von Ihnen ausgewählten Vorgänge und Kategorien sollten die Vorgänge darstellen, die Sie verfügbar machen möchten. Für den Echoadapter erstellt er jedoch einfach ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für jeden der folgenden Knoten mit aufgelisteter Knoten-ID:

EchoMainCategory  (node under the root node)  
        Echo/EchoStrings   (outbound operation)  
        Echo/EchoGreetings(outbound operation)  
        Echo/EchoCustomGreetingFromFile(outbound operation)  
        Echo/OnReceiveEcho (inbound operation)  

Die EchoMainCategory ist der Kategorieknoten unter dem Stammknoten ("/"). Dieser Knoten wird auch als Kategorie für eingehende und ausgehende Vorgänge verwendet. Daher können Sie beim Erstellen des Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekts für diese Kategorie folgendes ausführen:

MetadataRetrievalNode node = new MetadataRetrievalNode("EchoMainCategory");  
node.IsOperation = false; //category  
node.Direction = MetadataRetrievalNodeDirections.Inbound | MetadataRetrievalNodeDirections.Outbound  //for both inbound and outbound  

Für einen ausgehenden Vorgang wie Echo/EchoString, der zur EchoMainCategory gehört, können Sie die folgenden Aktionen ausführen:

if( "EchoMainCategory".CompareTo(nodeId) == 0 ) //category is EchoMainCategory  
      {  
          // Outbound operations  
          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;  

Für einen eingehenden Vorgang wie Echo/OnReceiveEcho, der zu EchoMainCategory gehört, können Sie folgende Aktionen ausführen:

  if( "EchoMainCategory".CompareTo(nodeId) == 0 ) //category is EchoMainCategory  
        {             
// Inbound operations  
            MetadataRetrievalNode inOpNode1 = new MetadataRetrievalNode("Echo/OnReceiveEcho");  
            inOpNode1.DisplayName = "OnReceiveEcho";  
            inOpNode1.Description = "This operation echoes the location and length of a file dropped in the specified file system.";  
            inOpNode1.Direction = MetadataRetrievalNodeDirections.Inbound;  
            inOpNode1.IsOperation = true;  

Wenn das Add Adapter Service Reference Plug-In und die Werkzeuge zur Nutzung des Adapterdienstes die Echo-Adaptermetadaten erkunden, beginnt es standardmäßig beim Stammknoten ("/").

Die folgende Abbildung zeigt, dass der EchoMainCategory-Knoten unter dem Stammknoten ("/") angezeigt wird:

Screenshot, der zeigt, dass der EchoMainCategory-Knoten unter dem Stammknoten (

Um die drei ausgehenden Vorgänge zu durchsuchen, wählen Sie im Add Adapter Service Reference Plug-In in der Dropdownliste " Vertragstyp auswählen " die Option "Client(Ausgehende Vorgänge)" aus. Diese Vorgänge werden im Listenfeld "Verfügbare Kategorien und Vorgänge " angezeigt, wie unten dargestellt:

Screenshot des Listenfelds

Beachten Sie in der vorherigen Abbildung, dass der Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A Wert in der Spalte "Name " des Listenfelds "Verfügbare Kategorien und Vorgänge " angezeigt wird. Der an den Microsoft.ServiceModel.Channels.MetadataRetrievalNode Konstruktor übergebene Parameter wird in der Knoten-ID-Spalte des Listenfelds "Verfügbare Kategorien und Vorgänge" angezeigt, und der Microsoft.ServiceModel.Channels.MetadataRetrievalNode.Description%2A Wert wird als QuickInfo angezeigt, die die Beschreibung enthält, wenn Sie mit der rechten Maustaste auf das Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A klicken.

Um die eingehenden Vorgänge anzuzeigen, wählen Sie im Add Adapter Service Reference Plug-In in der Dropdownliste " Vertragstyp auswählen " die Option "Dienst (Eingehende Vorgänge)" aus. Der eingehende OnReceiveEcho-Vorgang wird im Listenfeld "Verfügbare Kategorien und Vorgänge " angezeigt, wie in der folgenden Abbildung dargestellt:

Screenshot des eingehenden OnReceiveEcho-Vorgangs im Listenfeld für **Verfügbare Kategorien und Vorgänge**.

Implementieren des IMetadataBrowseHandlers

In diesem Schritt aktualisieren Sie die EchoAdapterMetadataBrowseHandler-Klasse, um die Metadatensuche des Echoadapters zu implementieren, d. h., die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A Methode der Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler Schnittstelle zu implementieren. Insbesondere erstellen Sie ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für jede Kategorie und jeden Vorgang, legen entsprechende Werte für dieses Objekt fest und geben dann das Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten für Kategorie und Vorgänge zurück. Denken Sie daran, dass Sie beim Erstellen eines Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekts die Knoten-ID und nicht den Anzeigenamen übergeben müssen.

So aktualisieren Sie die EchoAdapterMetadataBrowseHandler-Klasse

  1. Doppelklicken Sie im Projektmappen-Explorer auf die EchoAdapterMetadataBrowseHandler.cs Datei.

  2. Klicken Sie im Visual Studio-Editor mit der rechten Maustaste auf eine beliebige Stelle im Editor, zeigen Sie im Kontextmenü auf Strukturansicht, und klicken Sie dann auf Strukturansicht beenden.

  3. Ersetzen Sie im Visual Studio-Editor innerhalb der Browse-Methode die vorhandene Logik durch folgendes, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für EchoMainCategory zu erstellen.

    if (MetadataRetrievalNode.Root.NodeId.Equals(nodeId))  
    {  
        MetadataRetrievalNode node = new MetadataRetrievalNode("EchoMainCategory");  
        node.DisplayName = "Main Category";  
        node.IsOperation = false;  
        node.Description = "This category contains inbound and outbound categories.";  
        node.Direction = MetadataRetrievalNodeDirections.Inbound | MetadataRetrievalNodeDirections.Outbound;  
        return new MetadataRetrievalNode[] { node };  
    }  
    
  4. Fügen Sie die folgende Logik hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für Echo/OnReceiveEcho zu erstellen.

    if( "EchoMainCategory".CompareTo(nodeId) == 0 )  
    {  
        // Inbound operations  
        MetadataRetrievalNode inOpNode1 = new MetadataRetrievalNode("Echo/OnReceiveEcho");  
        inOpNode1.DisplayName = "OnReceiveEcho";  
        inOpNode1.Description = "This operation echos the location and length of a file dropped in the specified file system.";  
        inOpNode1.Direction = MetadataRetrievalNodeDirections.Inbound;  
        inOpNode1.IsOperation = true;  
    
  5. Fügen Sie die folgende Logik hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für Echo/EchoStrings zu erstellen.

    // Outbound operations  
    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;  
    
  6. Fügen Sie den folgenden Code hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für Echo/EchoGreetings zu erstellen.

    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;  
    
  7. Fügen Sie den folgenden Code hinzu, um ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für Echo/ EchoGreetingFromFile zu erstellen.

    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;  
    
  8. Fügen Sie den folgenden Code hinzu, um ein Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten oder null zurückzugeben, wenn keine Übereinstimmung vorliegt.

        return new MetadataRetrievalNode[] { inOpNode1, outOpNode1, outOpNode2, outOpNode3 };  
    }  
    return null;  
    
  9. Klicken Sie in Visual Studio im Menü "Datei " auf " Alle speichern".

  10. Klicken Sie im Menü Erstellen auf Lösung erstellen. Sie sollten das Projekt erfolgreich erstellen. Falls nicht, stellen Sie sicher, dass Sie alle oben aufgeführten Schritte befolgt haben.

Hinweis

Sie haben Ihre Arbeit gespeichert. Sie können Visual Studio zu diesem Zeitpunkt sicher schließen oder zum nächsten Schritt gehen, Schritt 5: Implementieren des Metadatensuchhandlers für den Echoadapter.

Was habe ich gerade getan?

Sie haben gerade die Metadaten-Browserfunktion des Echo-Adapters implementiert, indem Sie die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A Methode der Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler Schnittstelle implementieren. Insbesondere haben Sie ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für die Kategorie erstellt und dann als Array der Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekte zurückgegeben. Für jeden Vorgang haben Sie ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt erstellt und dann alle diese Objekte in einem Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNodezurückgegeben.

Nächste Schritte

Sie implementieren Metadatensuche und Auflösungsfunktionen sowie den Ausgehenden Nachrichtenaustausch. Schließlich erstellen und bereitstellen Sie den Echo-Adapter.

Siehe auch

Lernprogramm 1: Entwickeln des Echoadapters
Schritt 3: Implementieren der Verbindung für den Echoadapter
Schritt 5: Implementieren des Metadatensuchhandlers für den Echoadapter