Condividi tramite


Passaggio 5: Implementare il gestore per la ricerca di metadati per Echo Adapter

Passaggio 5 di 9

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.

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.MetadataRetrievalNodes, ad esempio

    resultList.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.

    Screenshot che mostra la finestra di dialogo Aggiungi riferimento al servizio adapter.

    Se non viene trovata alcuna corrispondenza, uno degli strumenti restituirà il messaggio di errore visualizzato nella figura seguente.

    Screenshot che mostra l'errore che restituisce se non viene trovata alcuna corrispondenza.

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

  1. In Esplora soluzioni fare doppio clic sul file EchoAdapterMetadataSearchHandler.cs.

  2. 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);  
    }  
    
  3. 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);  
    }  
    
  4. 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);  
        }  
    
  5. 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);  
    }  
    
  6. Continuare a aggiungere il codice seguente per restituire una matrice di Microsoft.ServiceModel.Channels.MetadataRetrievalNode oggetti.

    return resultList.ToArray();  
    
  7. In Visual Studio fare clic su Salva tutto dal menu File.

  8. 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