Partager via


Étape 4 : Implémenter le gestionnaire d’examen des métadonnées pour l’adaptateur Echo

Étape 4 sur 9

Durée d’exécution : 45 minutes

Dans cette étape, vous implémentez la fonctionnalité de navigation de l’adaptateur Echo. Cette fonctionnalité permet à votre adaptateur d’effectuer une navigation basée sur la connexion pour obtenir des métadonnées à partir du système cible. Quelles que soient les fonctionnalités de votre adaptateur, votre adaptateur doit prendre en charge la fonctionnalité de navigation.

Selon le Kit de développement logiciel (SDK) de l’adaptateur LOB WCF, pour prendre en charge la fonctionnalité de navigation, vous devez implémenter l’interface Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler . Pour l’adaptateur Echo, l’Assistant Développement d’adaptateur génère automatiquement la classe dérivée appelée EchoAdapterMetadataBrowseHandler.

Dans les étapes suivantes, vous mettez à jour cette classe pour mieux comprendre comment implémenter la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A méthode, comment définir différentes propriétés de l’objet Microsoft.ServiceModel.Channels.MetadataRetrievalNode et comment les nœuds d’opération et de catégorie pris en charge par l’adaptateur apparaissent dans l’outil Ajouter un plug-in de référence du service d’adaptateur.

Prérequis

Avant de commencer cette étape, vous devez avoir terminé l’étape 3 : Implémenter la connexion pour l’adaptateur Echo. Vous devez également comprendre les classes suivantes :

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNode

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections

  • Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler

The IMetadataBrowseHandler Interface

L’interface Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler est définie comme suit :

public interface IMetadataBrowseHandler : IConnectionHandler, IDisposable  
{  
    MetadataRetrievalNode[] Browse(string nodeId, int childStartIndex, int maxChildNodes, TimeSpan timeout);  
}  

La Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A méthode retourne un tableau d’objets Microsoft.ServiceModel.Channels.MetadataRetrievalNode basé sur les paramètres de la méthode. Les définitions de paramètres de la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A méthode sont décrites dans le tableau suivant.

Notes

L’implémentation de l’adaptateur Echo utilise uniquement l’ID de nœud et ignore les trois autres paramètres, car l’adaptateur Echo ne prend en charge que quelques nœuds.

Paramètre Définition
nodeId Chaque élément de la hiérarchie de l’Explorateur de métadonnées (le plug-in Add Adapter Service Reference et

Consumer Adapter Service Add-in) a un nodeId. Chaque ID de nœud doit être unique et peut être une catégorie ou une opération. La catégorie peut avoir des sous-catégories. Note: Si la valeur est null ou une chaîne vide («  »), les opérations sont récupérées à partir du nœud racine (« / ») par défaut.
childStartIndex Index du premier enfant à retourner.

Non pris en charge par l’adaptateur Echo.
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.

Lors de l’implémentation de la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A méthode, vous devez ajouter chaque catégorie et chaque nœud d’opération au tableau d’objets Microsoft.ServiceModel.Channels.MetadataRetrievalNode . Pour spécifier un nœud en tant que catégorie, définissez sur Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2Afalse. Pour spécifier un nœud en tant qu’opération, définissez sur Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2Atrue.

Parcourir les métadonnées de l’adaptateur Echo

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 . Les opérations et les catégories que vous choisissez doivent représenter les opérations que vous souhaitez exposer. Toutefois, pour l’adaptateur Echo, il crée simplement un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour chacun des nœuds suivants avec l’ID de nœud répertorié :

EchoMainCategory  (node under the root node)  
        Echo/EchoStrings   (outbound operation)  
        Echo/EchoGreetings(outbound operation)  
        Echo/EchoCustomGreetingFromFile(outbound operation)  
        Echo/OnReceiveEcho (inbound operation)  

EchoMainCategory est le nœud de catégorie sous le nœud racine (« / »). Ce nœud est également utilisé comme catégorie pour les opérations entrantes et sortantes. Par conséquent, lors de la création de l’objet Microsoft.ServiceModel.Channels.MetadataRetrievalNode pour cette catégorie, vous pouvez effectuer les opérations suivantes :

MetadataRetrievalNode node = new MetadataRetrievalNode("EchoMainCategory");  
node.IsOperation = false; //category  
node.Direction = MetadataRetrievalNodeDirections.Inbound | MetadataRetrievalNodeDirections.Outbound  //for both inbound and outbound  

Pour une opération sortante telle que Echo/EchoString qui appartient à EchoMainCategory, vous pouvez effectuer les opérations suivantes :

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;  

Pour une opération entrante telle que Echo/OnReceiveEcho qui appartient à EchoMainCategory, vous pouvez effectuer les opérations suivantes :

  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;  

Lorsque les outils Add Adapter Service Reference Plug-in and Consume Adapter Service Explorent les métadonnées de l’adaptateur Echo, par défaut, ils commencent à partir du nœud racine (« / »).

L’illustration suivante montre que le nœud EchoMainCategory s’affiche sous le nœud racine ( » / " ) :

Capture d’écran montrant que le nœud EchoMainCategory apparaît sous le nœud racine (« / »).

Pour parcourir les trois opérations sortantes, dans l’outil Ajouter un plug-in de référence du service d’adaptateur, dans la liste déroulante Sélectionner un type de contrat, sélectionnez l’option Client (opérations sortantes). Vous voyez ces opérations dans la zone de liste Catégories et opérations disponibles , comme indiqué ci-dessous :

Capture d’écran montrant la zone de liste Catégories et opérations disponibles.

Dans la figure précédente, notez que la Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A valeur s’affiche dans la colonne Nom de la zone de liste Catégories et opérations disponibles . Le paramètre passé au Microsoft.ServiceModel.Channels.MetadataRetrievalNode constructeur s’affiche dans la colonne ID de nœud de la zone de liste Catégories et opérations disponibles, et la Microsoft.ServiceModel.Channels.MetadataRetrievalNode.Description%2A valeur s’affiche comme info-bulle contenant la description, lorsque vous cliquez avec le bouton droit sur .Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A

Pour afficher les opérations entrantes, dans l’outil Ajouter un plug-in de référence de service d’adaptateur, dans la liste déroulante Sélectionner un type de contrat, sélectionnez l’option Service (Opérations entrantes). Vous voyez l’opération OnReceiveEcho entrante dans la zone de liste Catégories et opérations disponibles , comme illustré dans la figure suivante :

Capture d’écran montrant l’opération OnReceiveEcho entrante dans la zone de liste **Catégories et opérations disponibles.

Implémentation de IMetadataBrowseHandler

Dans cette étape, vous mettez à jour la classe EchoAdapterMetadataBrowseHandler pour implémenter la recherche des métadonnées de l’adaptateur Echo, c’est-à-dire pour implémenter la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A méthode de l’interface Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler . Plus précisément, vous créez un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour chaque catégorie et opération, définissez les valeurs appropriées pour cet objet, puis retournez le tableau d’objets Microsoft.ServiceModel.Channels.MetadataRetrievalNode pour la catégorie et les opérations. N’oubliez pas que lorsque vous créez un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet, vous devez transmettre l’ID du nœud, et non le nom d’affichage.

Pour mettre à jour la classe EchoAdapterMetadataBrowseHandler

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

  2. Dans l’éditeur Visual Studio, cliquez avec le bouton droit n’importe où dans l’éditeur, dans le menu contextuel, pointez sur Plan, puis cliquez sur Arrêter le plan.

  3. Dans l’éditeur Visual Studio, à l’intérieur de la méthode Browse , remplacez la logique existante par ce qui suit pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour 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 };  
    }  
    
  4. Continuez à ajouter la logique suivante pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour 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;  
    
  5. Continuez à ajouter la logique suivante pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour 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;  
    
  6. Continuez à ajouter le code suivant pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour 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;  
    
  7. Continuez à ajouter le code suivant pour créer un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour 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;  
    
  8. Continuez à ajouter le code suivant pour retourner un tableau d’objets Microsoft.ServiceModel.Channels.MetadataRetrievalNode ou null s’il n’est pas mis en correspondance.

        return new MetadataRetrievalNode[] { inOpNode1, outOpNode1, outOpNode2, outOpNode3 };  
    }  
    return null;  
    
  9. Dans Visual Studio, dans le menu Fichier , cliquez sur Enregistrer tout.

  10. Dans le menu Générer, cliquez sur Générer la solution. Vous devez générer 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 5 : Implémenter le gestionnaire de recherche de métadonnées pour l’adaptateur Echo.

Qu’est-ce que je viens de faire ?

Vous venez d’implémenter la fonctionnalité de navigation des métadonnées de l’adaptateur Echo en implémentant la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A méthode de l’interface Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler . Plus précisément, vous avez créé un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet pour la catégorie, puis vous l’avez Microsoft.ServiceModel.Channels.MetadataRetrievalNode retourné en tant que tableau des objets. Pour chaque opération, vous avez créé un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objet, puis retourné tous ces objets dans un tableau de Microsoft.ServiceModel.Channels.MetadataRetrievalNode.

Étapes suivantes

Vous implémentez des fonctionnalités de recherche et de résolution des métadonnées, ainsi que l’échange de messages sortants. Enfin, vous générez et déployez l’adaptateur Echo.

Voir aussi

Didacticiel 1 : Développer l’adaptateur Echo
Étape 3 : Implémenter la connexion pour l’adaptateur Echo
Étape 5 : Implémenter le gestionnaire de recherche de métadonnées pour l’adaptateur Echo