Passaggio 4: Implementare il gestore per l'esplorazione di metadati per Echo Adapter
Tempo da completare: 45 minuti
In questo passaggio si implementa la funzionalità sfoglia dell'adattatore Echo. Questa funzionalità consente all'adattatore di eseguire una navigazione basata su connessione per ottenere metadati dal sistema di destinazione. Indipendentemente dalle funzionalità della scheda, l'adattatore deve supportare la funzionalità sfoglia.
Secondo WCF LOB Adapter SDK, per supportare la funzionalità sfoglia, è necessario implementare l'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler
. Per l'adapter Echo, la Creazione guidata adapter genera automaticamente la classe derivata denominata EchoAdapterMetadataBrowseHandler.
Nei passaggi seguenti si aggiorna questa classe per ottenere una migliore comprensione di come implementare il Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A
metodo, come impostare varie proprietà dell'oggetto Microsoft.ServiceModel.Channels.MetadataRetrievalNode
e come vengono visualizzati i nodi di operazione e categoria supportati dall'adattatore nello strumento Plug-in Add Adapter Service Reference.
Prerequisiti
Prima di iniziare questo passaggio, è necessario aver completato correttamente il passaggio 3: Implementare la connessione per l'adapter Echo. È anche necessario comprendere le classi seguenti:
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections
Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler
Interfaccia IMetadataBrowseHandler
L'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler
è definita come:
public interface IMetadataBrowseHandler : IConnectionHandler, IDisposable
{
MetadataRetrievalNode[] Browse(string nodeId, int childStartIndex, int maxChildNodes, TimeSpan timeout);
}
Il Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A
metodo restituisce una matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti in base ai parametri del metodo. Le definizioni dei parametri per il Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A
metodo sono descritte nella tabella seguente.
Nota
L'implementazione dell'adapter Echo usa solo l'ID nodo e ignora gli altri tre parametri, poiché l'adapter Echo supporta solo alcuni nodi.
Parametro | Definition |
---|---|
nodeId | Ogni elemento nella gerarchia di Esplora metadati (plug-in Add Adapter Service Reference e Usare il componente aggiuntivo del servizio adapter ha un nodeId. Ogni ID nodo deve essere univoco e può essere una categoria o un'operazione. La categoria può avere sottocategorie. Nota: Se null o una stringa vuota (""), le operazioni vengono recuperate dal nodo radice ("/") per impostazione predefinita. |
childStartIndex | Indice del primo figlio da restituire. Non supportato dall'adattatore Echo. |
maxChildNodes | Numero massimo di nodi dei risultati da restituire. Usare Int32.Max per recuperare tutti i nodi dei risultati. Non supportato dall'adattatore Echo. |
timeout | Tempo massimo consentito per il completamento dell'operazione. Non supportato dall'adattatore Echo. |
Quando si implementa il Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A
metodo, è necessario aggiungere ogni categoria e nodo dell'operazione alla matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti. Per specificare un nodo come categoria, impostare su Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2A
false
. Per specificare un nodo come operazione, impostare su Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2A
true
.
Esplora metadati dell'adattatore Echo
A seconda delle categorie e delle operazioni del sistema di destinazione, esistono molti modi per creare una matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti. Le operazioni e le categorie scelte devono rappresentare le operazioni da esporre. Tuttavia, per l'adattatore Echo, viene semplicemente creato un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per ognuno dei nodi seguenti con ID nodo elencato:
EchoMainCategory (node under the root node)
Echo/EchoStrings (outbound operation)
Echo/EchoGreetings(outbound operation)
Echo/EchoCustomGreetingFromFile(outbound operation)
Echo/OnReceiveEcho (inbound operation)
EchoMainCategory è il nodo categoria nel nodo radice ("/"). Questo nodo viene usato anche come categoria per operazioni in ingresso e in uscita. Di conseguenza, quando si crea l'oggetto Microsoft.ServiceModel.Channels.MetadataRetrievalNode
per tale categoria, è possibile eseguire le operazioni seguenti:
MetadataRetrievalNode node = new MetadataRetrievalNode("EchoMainCategory");
node.IsOperation = false; //category
node.Direction = MetadataRetrievalNodeDirections.Inbound | MetadataRetrievalNodeDirections.Outbound //for both inbound and outbound
Per un'operazione in uscita, ad esempio Echo/EchoString appartenente a EchoMainCategory, è possibile eseguire le operazioni seguenti:
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;
Per un'operazione in ingresso, ad esempio Echo/OnReceiveEcho appartenente a EchoMainCategory, è possibile eseguire le operazioni seguenti:
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;
Quando gli strumenti di componente aggiuntivo Add Adapter Service Reference e Consume Adapter Service Add-in esplorano i metadati dell'adattatore Echo, per impostazione predefinita, inizia dal nodo radice ("/").
La figura seguente mostra che il nodo EchoMainCategory viene visualizzato nel nodo radice ("/"):
Per esplorare le tre operazioni in uscita, nello strumento Aggiungi plug-in di riferimento del servizio adapter selezionare l'opzione Client (Operazioni in uscita) nell'elenco a discesa Seleziona tipo di contratto. Queste operazioni vengono visualizzate nella casella di riepilogo Categorie e operazioni disponibili , come illustrato di seguito:
Nella figura precedente si noti che il Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A
valore viene visualizzato nella colonna Nome della casella di riepilogo Categorie e operazioni disponibili . Il parametro passato Microsoft.ServiceModel.Channels.MetadataRetrievalNode
al costruttore viene visualizzato nella colonna ID nodo della casella di riepilogo Categorie e operazioni disponibili e il Microsoft.ServiceModel.Channels.MetadataRetrievalNode.Description%2A
valore viene visualizzato come suggerimento dello strumento contenente la descrizione, quando si fa clic con il pulsante destro del mouse su Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A
.
Per visualizzare le operazioni in ingresso, nello strumento Aggiungi plug-in di riferimento al servizio adapter selezionare l'opzione Servizio (operazioni in ingresso) nell'elenco a discesa Seleziona tipo di contratto. Viene visualizzata l'operazione OnReceiveEcho in ingresso nella casella di riepilogo Categorie e operazioni disponibili , come illustrato nella figura seguente:
Implementazione di IMetadataBrowseHandler
In questo passaggio si aggiorna la classe EchoAdapterMetadataBrowseHandler per implementare l'esplorazione dei metadati dell'adapter Echo, ovvero per implementare il Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A
metodo dell'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler
. In particolare, si crea un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per ogni categoria e operazione, impostare i valori appropriati per tale oggetto e quindi restituire la matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti per categorie e operazioni. Tenere presente che quando si crea un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto, è necessario passare l'ID del nodo, non il nome visualizzato.
Per aggiornare la classe EchoAdapterMetadataBrowseHandler
In Esplora soluzioni fare doppio clic sul file EchoAdapterMetadataBrowseHandler.cs.
Nell'editor di Visual Studio fare clic con il pulsante destro del mouse in un punto qualsiasi all'interno dell'editor, nel menu di scelta rapida, scegliere Struttura e quindi fare clic su Arresta struttura.
Nell'editor di Visual Studio, all'interno del metodo Browse , sostituire la logica esistente con la seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per EchoMainCategory.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 }; }
Continuare a aggiungere la logica seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per Echo/OnReceiveEcho.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;
Continuare a aggiungere la logica seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per Echo/EchoStrings.// 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;
Continuare a aggiungere il codice seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per Echo/EchoGreetings.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;
Continuare a aggiungere il codice seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per Echo/ EchoGreetingFromFile.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;
Continuare a aggiungere il codice seguente per restituire una matrice di
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti o null se non corrisponde.return new MetadataRetrievalNode[] { inOpNode1, outOpNode1, outOpNode2, outOpNode3 }; } return null;
In Visual Studio fare clic su Salva tutto dal menu File.
Nel menu Compila scegliere Compila soluzione. È consigliabile compilare correttamente il progetto. In caso contrario, assicurarsi di aver seguito ogni passaggio precedente.
Nota
Il lavoro è stato salvato. È possibile chiudere Visual Studio in modo sicuro in questo momento o passare al passaggio successivo, passaggio 5: Implementare il gestore ricerca metadati per l'adapter Echo.
Cosa ho fatto?
È stata appena implementata la funzionalità di esplorazione dei metadati dell'adapter Echo implementando il Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A
metodo dell'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler
. In particolare, è stato creato un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per la categoria e quindi è stato restituito come matrice degli Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti. Per ogni operazione è stato creato un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto e quindi è stato restituito tutti gli oggetti in una matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
.
Passaggi successivi
Si implementano le funzionalità di ricerca e risoluzione dei metadati e lo scambio di messaggi in uscita. Infine, si compila e si distribuisce l'adapter Echo.
Vedere anche
Esercitazione 1: Sviluppare Echo Adapter
Passaggio 3: Implementare la connessione per Echo Adapter
Passaggio 5: Implementare il gestore per la ricerca di metadati per Echo Adapter