Passaggio 5: Implementare il gestore per la ricerca di metadati per Echo Adapter
Tempo da completare: 30 minuti
In questo passaggio dell'esercitazione si implementa la funzionalità di ricerca dell'adapter Echo. A differenza di sfoglia, la ricerca è facoltativa. Secondo WCF LOB Adapter SDK, per supportare la funzionalità di ricerca, è necessario implementare l'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
. Per l'adapter Echo, la Creazione guidata adapter genera automaticamente una classe derivata denominata EchoAdapterMetadataSearchHandler.
È prima di tutto possibile aggiornare la classe EchoAdapterMetadataSearchHandler per ottenere una migliore comprensione di come implementare Microsoft.ServiceModel.Channels.MetadataRetrievalNode
questa interfaccia, come popolare l'oggetto e come vengono visualizzati i risultati della ricerca nello strumento Plug-in Add Adapter Service Reference.
Prerequisiti
Prima di iniziare questo passaggio, completare il passaggio 4: Implementare il gestore esplora metadati per l'adapter Echo. È anche necessario avere una chiara comprensione delle classi seguenti:
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections
Interfaccia IMetadataSearchHandler
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
viene definito come:
public interface IMetadataSearchHandler : IConnectionHandler, IDisposable
{
MetadataRetrievalNode[] Search(string nodeId, string searchCriteria, int maxChildNodes, TimeSpan timeout);
}
Il Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A
metodo restituisce una matrice di oggetti in base ai criteri di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
ricerca. Le definizioni dei parametri per il metodo Search sono descritte nella tabella seguente:
Parametro | Definition |
---|---|
nodeId | ID nodo da cui iniziare la ricerca. Se null o una stringa vuota (""), le operazioni verranno recuperate dal nodo radice ("/"). |
searchCriteria | Criteri di ricerca, specifici dell'adattatore. Se non vengono specificati criteri di ricerca, l'adapter deve restituire tutti i nodi. |
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. |
Per il risultato della ricerca, l'adattatore può scegliere di restituire nodi categoria o nodi dell'operazione o entrambi. È fino al tipo di funzionalità di ricerca supportata dall'adattatore.
Ricerca 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 da restituire. Il modo in cui Echo adapter implementa la funzionalità di ricerca consiste nell'eseguire ogni operazione con il relativo ID nodo nell'elenco seguente:
Echo/OnReceiveEcho, inbound operation
Echo/EchoStrings, outbound operation
Echo/EchoGreetings, outbound operation
Echo/EchoGreetingFromFile, outbound operation
Se l'ID nodo corrisponde ai criteri di ricerca, crea un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto usando l'ID nodo dell'operazione e quindi assegna le proprietà con i valori. Ad esempio,MetadataRetrievalNode nodeInbound = new MetadataRetrievalNode("Echo/OnReceiveEcho"); //create the MetadataRetrievalNode using the operation's node ID. nodeInbound.DisplayName = "OnReceiveEcho"; //The Display Name shown in the Name column of the Add Adapter Service Reference Visual Studio Plug-in nodeInbound.Description = "This operation echoes the location and length of a file dropped in the specified file system."; //The Description shown as the tool tip in the Add Adapter Service Visual Studio Plug-in nodeInbound.Direction = MetadataRetrievalNodeDirections.Inbound; //It is an inbound operation nodeInbound.IsOperation = true; //It is an operation, not category.
Aggiungere quindi l'oggetto a una raccolta di
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
s, ad esempioresultList.Add(nodeInbound);
Infine, restituisce la raccolta in formato matrice.
return resultList.ToArray();
Per eseguire una ricerca basata su connessione per le operazioni disponibili, è possibile usare i plug-in del servizio adapter e usare i componenti aggiuntivi del servizio adapter. Ad esempio, la figura seguente mostra che quando i criteri di ricerca sono la stringa Greeting, la ricerca restituisce le operazioni EchoGreetings e EchoGreetingFromFile.
Se non viene trovata alcuna corrispondenza, uno degli strumenti restituirà il messaggio di errore visualizzato nella figura seguente.
Implementazione di IMetadataSearchHandler
Si implementerà il Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A
metodo dell'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
. Se il nome visualizzato dell'operazione corrisponde ai criteri di ricerca, si creerà un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per tale operazione e quindi si aggiungerà tale oggetto a una matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti.
Per aggiornare la classe EchoAdapterMetadataSearchHandler
In Esplora soluzioni fare doppio clic sul file EchoAdapterMetadataSearchHandler.cs.
Nell'editor di Visual Studio, all'interno del metodo Search , sostituire la logica esistente con quanto segue. Questa logica crea un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto se Echo/OnReceiveEcho corrisponde ai criteri di ricerca specificati.List<MetadataRetrievalNode> resultList = new List<MetadataRetrievalNode>(); if ("OnReceiveEcho".ToLower().Contains(searchCriteria.ToLower())) { MetadataRetrievalNode nodeInbound = new MetadataRetrievalNode("Echo/OnReceiveEcho"); nodeInbound.DisplayName = "OnReceiveEcho"; nodeInbound.Description = "This operation echoes the location and length of a file dropped in the specified file system."; nodeInbound.Direction = MetadataRetrievalNodeDirections.Inbound; nodeInbound.IsOperation = true; resultList.Add(nodeInbound); }
Continuare a aggiungere la logica seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto se Echo/EchoStrings corrisponde ai criteri di ricerca specificati.if ("EchoStrings".ToLower().Contains(searchCriteria.ToLower())) { 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; resultList.Add(outOpNode1); }
Continuare a aggiungere la logica seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto se Echo/EchoGreetings corrisponde ai criteri di ricerca specificati.if ("EchoGreetings".ToLower().Contains(searchCriteria.ToLower())) { 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; resultList.Add(outOpNode2); }
Continuare a aggiungere il codice seguente per creare un
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto se Echo/EchoGreetingFromFile corrisponde ai criteri di ricerca specificati.if ("EchoCustomGreetingFromFile".ToLower().Contains(searchCriteria.ToLower())) { 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; resultList.Add(outOpNode3); }
Continuare a aggiungere il codice seguente per restituire una matrice di
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti.return resultList.ToArray();
In Visual Studio fare clic su Salva tutto dal menu File.
Nel menu Compila scegliere Compila soluzione. È necessario 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 6: Implementare il gestore di risoluzione dei metadati per l'adapter Echo.
Cosa ho fatto?
È stata appena implementata la funzionalità di ricerca dei metadati della scheda Echo implementando il Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A
metodo dell'interfaccia Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
. In particolare, è stato creato un Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetto per ogni operazione corrispondente ai criteri e quindi è stata restituita una matrice degli Microsoft.ServiceModel.Channels.MetadataRetrievalNode
oggetti.
Passaggi successivi
Si implementeranno le funzionalità di risoluzione dei metadati e le funzionalità di scambio di messaggi in uscita e in ingresso. Infine, si creerà e si distribuirà l'adapter Echo.
Vedere anche
Passaggio 4: Implementare il gestore per l'esplorazione di metadati per Echo Adapter
Passaggio 6: Implementare il gestore per la risoluzione di metadati per Echo Adapter
Esercitazione 1: Sviluppare Echo Adapter