Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
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:
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:
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
Doppelklicken Sie im Projektmappen-Explorer auf die EchoAdapterMetadataBrowseHandler.cs Datei.
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.
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 }; }
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;
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;
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;
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;
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;
Klicken Sie in Visual Studio im Menü "Datei " auf " Alle speichern".
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.MetadataRetrievalNode
zurü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