Freigeben über


Schritt 4: Implementieren des Handlers zum Durchsuchen von Metadaten für den Echo-Adapter

Schritt 4 von 9

Abgeschlossene Zeit: 45 Minuten

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

Gemäß dem WCF LOB Adapter SDK müssen Sie die Schnittstelle implementieren, um die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler Suchfunktion 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 dafür zu erhalten, wie die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A Methode implementiert wird, wie verschiedene Eigenschaften des Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekts festgelegt werden, und wie die vom Adapter unterstützten Vorgangs- und Kategorieknoten im Tool Zum Hinzufügen des Adapterdienstverweis-Plug-Ins angezeigt werden.

Voraussetzungen

Bevor Sie mit diesem Schritt beginnen, müssen Sie Schritt 3: Implementieren der Verbindung für den Echoadapter erfolgreich abgeschlossen haben. 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 ist definiert wie folgt:

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 Echo-Adapterimplementierung 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

Adapterdienst-Add-In nutzen) verfügt über eine nodeId. Jede Knoten-ID muss eindeutig sein und kann eine Kategorie oder ein Vorgang sein. Die Kategorie kann Unterkategorien aufweisen. Hinweis: Wenn null oder eine leere Zeichenfolge (""), werden Vorgänge standardmäßig vom Stammknoten ("/") abgerufen.
childStartIndex Der Index des ersten untergeordneten Elements, das zurückgegeben werden soll.

Vom Echo-Adapter nicht unterstützt.
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.

Beim Implementieren der Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A -Methode müssen Sie alle Kategorien und Vorgangsknoten dem Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten hinzufügen. Um einen Knoten als Kategorie anzugeben, legen Sie auf Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2Afalsefest. Um einen Knoten als Vorgang anzugeben, legen Sie auf Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2Atruefest.

Echoadaptermetadaten 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 Echo-Adapter wird jedoch einfach ein Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekt für jeden der folgenden Knoten mit aufgelisteter Knoten-ID erstellt:

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

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 die folgenden Schritte 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 zu EchoMainCategory gehört, können Sie die folgenden Schritte 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 die folgenden Schritte 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 die Add-Ins Add Adapter Service Reference Plug-In and Consume Adapter Service Add-In die Echo-Adaptermetadaten untersuchen, beginnt dies standardmäßig über den Stammknoten ("/").

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

Screenshot: Der EchoMainCategory-Knoten wird unter dem Stammknoten (

Um die drei ausgehenden Vorgänge zu durchsuchen, wählen Sie im Tool Adapterdienstverweis-Plug-In hinzufügen 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 gezeigt:

Screenshot: Listenfeld Verfügbare Kategorien und Vorgänge

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 Spalte Knoten-ID des Listenfelds Verfügbare Kategorien und Vorgänge angezeigt, und der Microsoft.ServiceModel.Channels.MetadataRetrievalNode.Description%2A Wert wird als Tooltipp mit der Beschreibung angezeigt, wenn Sie mit der rechten Maustaste auf klicken Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A.

Um die eingehenden Vorgänge anzuzeigen, wählen Sie im Add Adapter Service Reference Plug-In Tool in der Dropdownliste Select contract type (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: Eingehender OnReceiveEcho-Vorgang im Listenfeld **Verfügbare Kategorien und Vorgänge

Implementieren des IMetadataBrowseHandlers

In diesem Schritt aktualisieren Sie die EchoAdapterMetadataBrowseHandler-Klasse, um die Metadatensuche des Echo-Adapters 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. Beachten Sie, 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 Projektmappen-Explorer auf die Datei EchoAdapterMetadataBrowseHandler.cs.

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

  3. Ersetzen Sie im Visual Studio-Editor in 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. Fahren Sie mit dem Hinzufügen der folgenden Logik fort, 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. Fahren Sie mit dem Hinzufügen des folgenden Codes fort, 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. Fahren Sie mit dem Hinzufügen des folgenden Codes fort, um ein Array von Microsoft.ServiceModel.Channels.MetadataRetrievalNode Objekten zurückzugeben, oder null, wenn nicht übereinstimmend.

        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 Projektmappe erstellen. Sie sollten das Projekt erfolgreich erstellen. 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, Schritt 5: Implementieren des Metadatensuchhandlers für den Echoadapter, fortfahren.

Was habe ich nur getan?

Sie haben gerade die Metadatensuchefunktion des Echo-Adapters implementiert, indem Sie die Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A Methode der Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler Schnittstelle implementiert haben. 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 Funktionen für die Metadatensuche und -auflösung sowie den Austausch ausgehender Nachrichten. Schließlich erstellen Und bereitstellen Sie den Echo-Adapter.

Weitere Informationen

Tutorial 1: Entwickeln des Echo-Adapters
Schritt 3: Implementieren der Verbindung für den Echo-Adapter
Schritt 5: Implementieren des Handlers zum Suchen nach Metadaten für den Echo-Adapter