Schritt 4: Implementieren des Handlers zum Durchsuchen von Metadaten für den Echo-Adapter
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%2A
false
fest. Um einen Knoten als Vorgang anzugeben, legen Sie auf Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2A
true
fest.
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:
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:
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:
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
Doppelklicken Sie Projektmappen-Explorer auf die Datei EchoAdapterMetadataBrowseHandler.cs.
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.
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 }; }
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;
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;
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;
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;
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;
Klicken Sie in Visual Studio im Menü Datei auf Alle speichern.
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.MetadataRetrievalNode
zurü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