Partager via


Étape 5 : Implémenter le gestionnaire de recherche de métadonnées pour l’adaptateur Echo

Étape 5 sur 9

Durée d’exécution : 30 minutes

Dans cette étape du tutoriel, vous implémentez la fonctionnalité de recherche de l’adaptateur Echo. Contrairement à parcourir, la recherche est facultative. Selon le Kit de développement logiciel (SDK) de l’adaptateur LOB WCF, pour prendre en charge la fonctionnalité de recherche, vous devez implémenter l’interface Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler . Pour l’adaptateur Echo, l’Assistant Développement d’adaptateur génère automatiquement une classe dérivée appelée EchoAdapterMetadataSearchHandler.

Vous devez d’abord mettre à jour la classe EchoAdapterMetadataSearchHandler pour mieux comprendre comment implémenter cette interface, comment remplir Microsoft.ServiceModel.Channels.MetadataRetrievalNode un objet et comment les résultats de la recherche apparaissent dans l’outil Add Adapter Service Reference Plug-in.

Prérequis

Avant de commencer cette étape, effectuez l’étape 4 : Implémenter le gestionnaire de navigation de métadonnées pour l’adaptateur Echo. Vous devez également avoir une compréhension claire des classes suivantes :

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNode

  • Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections

The IMetadataSearchHandler Interface

Le Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler est défini comme :

public interface IMetadataSearchHandler : IConnectionHandler, IDisposable  
{  
    MetadataRetrievalNode[] Search(string nodeId, string searchCriteria, int maxChildNodes, TimeSpan timeout);  
}  

La Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A méthode retourne un tableau d’objets en fonction des Microsoft.ServiceModel.Channels.MetadataRetrievalNode critères de recherche. Les définitions de paramètres de la méthode Search sont décrites dans le tableau suivant :

Paramètre Définition
nodeId ID de nœud à partir duquel commencer la recherche. Si la valeur est null ou une chaîne vide («  »), les opérations sont récupérées à partir du nœud racine (« / »).
searchCriteria Critères de recherche, qui sont spécifiques à l’adaptateur. Si aucun critère de recherche n’est spécifié, l’adaptateur doit retourner tous les nœuds.
maxChildNodes Nombre maximal de nœuds de résultat à retourner. Utilisez Int32.Max pour récupérer tous les nœuds de résultat.

Non pris en charge par l’adaptateur Echo.
timeout Durée maximale autorisée pour l’exécution de l’opération.

Non pris en charge par l’adaptateur Echo.

Pour le résultat de recherche, votre adaptateur peut choisir de retourner des nœuds de catégorie ou des nœuds d’opération, ou les deux. Il appartient au type de fonctionnalité de recherche prise en charge par votre adaptateur.

Selon les catégories et les opérations de votre système cible, il existe de nombreuses façons de créer un tableau d’objets Microsoft.ServiceModel.Channels.MetadataRetrievalNode à retourner. La façon dont l’adaptateur Echo implémente la fonctionnalité de recherche consiste à parcourir chaque opération avec son ID de nœud dans la liste suivante :

Echo/OnReceiveEcho, inbound operation  
Echo/EchoStrings, outbound operation  
Echo/EchoGreetings, outbound operation  
Echo/EchoGreetingFromFile, outbound operation  
  • Si l’ID de nœud correspond ensuite aux critères de recherche, il crée un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet à l’aide de l’ID de nœud de l’opération, puis affecte les propriétés avec des valeurs. Par exemple,

    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.  
    
  • Ajoutez ensuite l’objet à une collection de Microsoft.ServiceModel.Channels.MetadataRetrievalNodes, par exemple,

    resultList.Add(nodeInbound);  
    
  • Enfin, retourne la collection dans un format de tableau.

    return resultList.ToArray();  
    

    Vous pouvez utiliser les outils Add Adapter Service Reference Plug-in et Consume Adapter Service Pour effectuer une recherche basée sur la connexion pour les opérations disponibles. Par exemple, la figure suivante montre que lorsque le critère de recherche est la chaîne Greeting, la recherche renvoie les opérations EchoGreeting et EchoGreetingFromFile .

    Capture d’écran montrant la boîte de dialogue Ajouter une référence de service d’adaptateur.

    Si aucune correspondance n’est trouvée, l’un ou l’autre des outils retourne le message d’erreur illustré dans la figure suivante.

    Capture d’écran montrant l’erreur qui retourne si aucune correspondance n’est trouvée.

Implémentation de IMetadataSearchHandler

Vous allez implémenter la Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A méthode de l’interface Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler . Si le nom d’affichage de l’opération correspond aux critères de recherche, vous allez créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour cette opération, puis ajouter cet objet à un tableau des Microsoft.ServiceModel.Channels.MetadataRetrievalNode objets.

Pour mettre à jour la classe EchoAdapterMetadataSearchHandler

  1. Dans Explorateur de solutions, double-cliquez sur le fichier EchoAdapterMetadataSearchHandler.cs.

  2. Dans l’éditeur Visual Studio, à l’intérieur de la méthode Search , remplacez la logique existante par ce qui suit. Cette logique crée un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet si Echo/OnReceiveEcho correspond aux critères de recherche spécifiés.

    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. Continuez à ajouter la logique suivante pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet si Echo/EchoStrings correspond aux critères de recherche spécifiés.

    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. Continuez à ajouter la logique suivante pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet si Echo/EchoGreetings correspond aux critères de recherche spécifiés.

    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. Continuez à ajouter le code suivant pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet si Echo/EchoGreetingFromFile correspond aux critères de recherche spécifiés.

    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. Continuez à ajouter le code suivant pour retourner un tableau d’objets Microsoft.ServiceModel.Channels.MetadataRetrievalNode .

    return resultList.ToArray();  
    
  7. Dans Visual Studio, dans le menu Fichier , cliquez sur Enregistrer tout.

  8. Dans le menu Générer, cliquez sur Générer la solution. Vous devez compiler le projet avec succès. Si ce n’est pas le cas, vérifiez que vous avez suivi chaque étape ci-dessus.

    Notes

    Vous avez enregistré votre travail. Vous pouvez fermer Visual Studio en toute sécurité à ce stade ou passer à l’étape suivante, Étape 6 : Implémenter le gestionnaire de résolution des métadonnées pour l’adaptateur Echo.

Qu’est-ce que je viens de faire ?

Vous venez d’implémenter la fonctionnalité de recherche de métadonnées de l’adaptateur Echo en implémentant la Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A méthode de l’interface Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler . Plus précisément, vous avez créé un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour chaque opération qui correspond aux critères, puis retourné un tableau des Microsoft.ServiceModel.Channels.MetadataRetrievalNode objets.

Étapes suivantes

Vous allez implémenter la fonctionnalité de résolution des métadonnées et les fonctionnalités d’échange de messages sortants et entrants. Enfin, vous allez générer et déployer l’adaptateur Echo.

Voir aussi

Étape 4 : Implémenter le gestionnaire d’examen des métadonnées pour l’adaptateur Echo
Étape 6 : Implémenter le gestionnaire de résolution des métadonnées pour l’adaptateur Echo
Didacticiel 1 : Développer l’adaptateur Echo