Compartir vía


Paso 4: Implementar el controlador de exploración de metadatos para el adaptador de Echo

Paso 4 de 9

Tiempo de finalización: 45 minutos

En este paso, implementará la funcionalidad de exploración del adaptador echo. Esta funcionalidad permite al adaptador realizar un examen basado en la conexión para obtener metadatos del sistema de destino. Independientemente de las funcionalidades del adaptador, el adaptador debe admitir la funcionalidad de exploración.

Según el SDK del adaptador de LOB de WCF, para admitir la funcionalidad de exploración, debe implementar la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler interfaz . Para el adaptador echo, el Asistente para desarrollo de adaptadores genera automáticamente la clase derivada denominada EchoAdapterMetadataBrowseHandler.

En los pasos siguientes, actualizará esta clase para comprender mejor cómo implementar el Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A método, cómo establecer varias propiedades del Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto y cómo aparecen los nodos de operación y categoría admitidos por el adaptador en la herramienta Add Adapter Service Reference Plug-in.

Requisitos previos

Antes de comenzar este paso, debe haber completado correctamente el paso 3: Implementar la conexión para el adaptador de eco. También debe comprender las siguientes clases:

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNode

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections

  • Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler

Interfaz IMetadataBrowseHandler

La Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler interfaz se define como:

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

El Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A método devuelve una matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos basándose en los parámetros del método. Las definiciones de parámetros para el Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A método se describen en la tabla siguiente.

Nota

La implementación del adaptador de eco solo usa el identificador de nodo y omite los otros tres parámetros, ya que el adaptador de Eco solo admite unos pocos nodos.

Parámetro Definición
nodeId Cada elemento de la jerarquía del explorador de metadatos (complemento Agregar referencia de servicio de adaptador y

Consumir complemento de servicio de adaptador) tiene un nodeId. Cada identificador de nodo debe ser único y puede ser una categoría o una operación. La categoría puede tener subcategorías. Nota: Si es null o una cadena vacía (""), las operaciones se recuperan del nodo raíz ("/") de forma predeterminada.
childStartIndex Índice del primer elemento secundario que se va a devolver.

No es compatible con el adaptador echo.
maxChildNodes Número máximo de nodos de resultado que se van a devolver. Use Int32.Max para recuperar todos los nodos de resultados.

No es compatible con el adaptador echo.
timeout Tiempo máximo permitido para que se complete la operación.

No es compatible con el adaptador echo.

Al implementar el Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A método , debe agregar cada nodo de categoría y operación a la matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos . Para especificar un nodo como categoría, establezca en Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2Afalse. Para especificar un nodo como operación, establezca en Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2Atrue.

Examen de metadatos del adaptador de eco

En función de las categorías y operaciones del sistema de destino, hay muchas maneras de crear una matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos. Las operaciones y categorías que elija deben representar las operaciones que desea exponer. Pero para el adaptador echo, simplemente crea un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para cada uno de los nodos siguientes con el identificador de nodo enumerado:

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

EchoMainCategory es el nodo de categoría bajo el nodo raíz ("/"). Este nodo también se usa como categoría para las operaciones entrantes y salientes. Por lo tanto, al crear el Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para esa categoría, puede hacer lo siguiente:

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

Para una operación de salida, como Echo/EchoString que pertenece a EchoMainCategory, puede hacer lo siguiente:

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;  

Para una operación entrante como Echo/OnReceiveEcho que pertenece a EchoMainCategory, puede hacer lo siguiente:

  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;  

Cuando las herramientas Add Adapter Service Reference Plug-in y Consume Adapter Service Add-in exploren los metadatos del adaptador de eco, de forma predeterminada, se inicia desde el nodo raíz ("/").

En la ilustración siguiente se muestra que el nodo EchoMainCategory aparece en el nodo raíz ("/"):

Captura de pantalla que muestra que el nodo EchoMainCategory aparece en el nodo raíz (

Para examinar las tres operaciones salientes, en la herramienta Agregar complemento de referencia de servicio de adaptador, en la lista desplegable Seleccionar tipo de contrato, seleccione la opción Cliente (operaciones de salida). Verá esas operaciones en el cuadro de lista Categorías y operaciones disponibles , como se muestra a continuación:

Captura de pantalla que muestra el cuadro de lista Categorías y operaciones disponibles.

En la ilustración anterior, observe que el Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A valor aparece en la columna Nombre del cuadro de lista Categorías y operaciones disponibles . El parámetro pasado al Microsoft.ServiceModel.Channels.MetadataRetrievalNode constructor aparece en la columna Id. de nodo del cuadro de lista Categorías y operaciones disponibles, y el Microsoft.ServiceModel.Channels.MetadataRetrievalNode.Description%2A valor aparece como la sugerencia de herramientas que contiene la descripción, al hacer clic con el botón derecho en .Microsoft.ServiceModel.Channels.MetadataRetrievalNode.DisplayName%2A

Para ver las operaciones entrantes, en la herramienta Agregar complemento de referencia del servicio de adaptador, en la lista desplegable Seleccionar tipo de contrato, seleccione la opción Servicio (operaciones de entrada). Verá la operación De entrada OnReceiveEcho en el cuadro de lista Categorías y operaciones disponibles , como se muestra en la ilustración siguiente:

Captura de pantalla que muestra la operación De entrada OnReceiveEcho en el cuadro de lista **Categorías y operaciones disponibles.

Implementación de IMetadataBrowseHandler

En este paso, actualizará la clase EchoAdapterMetadataBrowseHandler para implementar el examen de metadatos del adaptador de Eco, es decir, para implementar el Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A método de la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler interfaz. En concreto, se crea un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para cada categoría y operación, se establecen los valores adecuados para ese objeto y, a continuación, se devuelve la matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos para categorías y operaciones. Tenga en cuenta que, al crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto, debe pasar el identificador del nodo, no el nombre para mostrar.

Para actualizar la clase EchoAdapterMetadataBrowseHandler

  1. En Explorador de soluciones, haga doble clic en el archivo EchoAdapterMetadataBrowseHandler.cs.

  2. En el editor de Visual Studio, haga clic con el botón derecho en cualquier parte del editor, en el menú contextual, seleccione Esquematización y, a continuación, haga clic en Detener esquematización.

  3. En el editor de Visual Studio, dentro del método Browse , reemplace la lógica existente por lo siguiente para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para 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. Continúe agregando la siguiente lógica para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para 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. Continúe agregando la siguiente lógica para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para 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. Siga agregando el código siguiente para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para 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. Continúe agregando el código siguiente para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para 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. Siga agregando el código siguiente para devolver una matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos o null si no coincide.

        return new MetadataRetrievalNode[] { inOpNode1, outOpNode1, outOpNode2, outOpNode3 };  
    }  
    return null;  
    
  9. En Visual Studio, en el menú Archivo , haga clic en Guardar todo.

  10. En el menú Compilar , haga clic en Compilar solución. Debe compilar correctamente el proyecto. Si no es así, asegúrese de que ha seguido todos los pasos anteriores.

Nota

Ya ha guardado su trabajo. Puede cerrar Visual Studio de forma segura en este momento o ir al paso siguiente, Paso 5: Implementar el controlador de búsqueda de metadatos para el adaptador de eco.

¿Qué hice?

Acaba de implementar la funcionalidad de exploración de metadatos del adaptador echo mediante la implementación del Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler.Browse%2A método de la Microsoft.ServiceModel.Channels.Common.IMetadataBrowseHandler interfaz . En concreto, ha creado un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para la categoría y, a continuación, lo ha devuelto como una matriz de los Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos . Para cada operación, ha creado un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto y, a continuación, ha devuelto todos esos objetos en una matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode.

Pasos siguientes

Implemente funcionalidades de búsqueda y resolución de metadatos y el intercambio de mensajes salientes. Por último, compile e implemente el adaptador echo.

Consulte también

Tutorial 1: Desarrollar el adaptador de Echo
Paso 3: Implementar la conexión para el adaptador de Echo
Paso 5: Implementar el controlador de búsqueda de metadatos para el adaptador de Echo