Compartir a través de


Paso 5: Implementar el controlador de búsqueda de metadatos para el adaptador de Echo

Paso 5 de 9

Tiempo de finalización: 30 minutos

En este paso del tutorial, implementará la funcionalidad de búsqueda del adaptador echo. A diferencia de examinar, la búsqueda es opcional. Según el SDK del adaptador de LOB de WCF, para admitir la funcionalidad de búsqueda, debe implementar la Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler interfaz . Para el adaptador echo, el Asistente para desarrollo de adaptadores genera automáticamente una clase derivada denominada EchoAdapterMetadataSearchHandler.

En primer lugar, actualice la clase EchoAdapterMetadataSearchHandler para comprender mejor cómo implementar esta interfaz, cómo rellenar Microsoft.ServiceModel.Channels.MetadataRetrievalNode el objeto y cómo aparecen los resultados de búsqueda en la herramienta Add Adapter Service Reference Plug-in.

Requisitos previos

Antes de comenzar este paso, complete el paso 4: Implementar el controlador de exploración de metadatos para el adaptador de eco. También debe tener una comprensión clara de las siguientes clases:

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNode

  • Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler

  • Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections

Interfaz IMetadataSearchHandler

Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler se define como:

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

El Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A método devuelve una matriz de objetos basándose en los criterios de Microsoft.ServiceModel.Channels.MetadataRetrievalNode búsqueda. Las definiciones de parámetros para el método Search se describen en la tabla siguiente:

Parámetro Definición
nodeId Identificador de nodo desde el que se va a empezar a buscar. Si es null o una cadena vacía (""), las operaciones se recuperarán del nodo raíz ("/").
searchCriteria Los criterios de búsqueda, que son específicos del adaptador. Si no se especifica ningún criterio de búsqueda, el adaptador debe devolver todos los nodos.
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.

Para el resultado de la búsqueda, el adaptador puede elegir devolver nodos de categoría o nodos de operación, o ambos. Es hasta el tipo de característica de búsqueda que admite el adaptador.

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 que se van a devolver. La forma en que el adaptador de Eco implementa la funcionalidad de búsqueda es recorrer cada operación con su identificador de nodo en la lista siguiente:

Echo/OnReceiveEcho, inbound operation  
Echo/EchoStrings, outbound operation  
Echo/EchoGreetings, outbound operation  
Echo/EchoGreetingFromFile, outbound operation  
  • Si el identificador de nodo coincide con los criterios de búsqueda, crea un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto mediante el identificador de nodo de la operación y, a continuación, asigna las propiedades con valores. Por ejemplo,

    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.  
    
  • Y, a continuación, agregue el objeto a una colección de los Microsoft.ServiceModel.Channels.MetadataRetrievalNode, por ejemplo,

    resultList.Add(nodeInbound);  
    
  • Por último, devuelve la colección en un formato de matriz.

    return resultList.ToArray();  
    

    Puede usar las herramientas Add Adapter Service Reference Plug-in y Consume Adapter Service Add-in para realizar una búsqueda basada en la conexión para las operaciones disponibles. Por ejemplo, en la ilustración siguiente se muestra que cuando los criterios de búsqueda son la cadena Greeting, la búsqueda devuelve las operaciones EchoGreetings y EchoGreetingFromFile .

    Captura de pantalla que muestra el cuadro de diálogo Agregar referencia del servicio de adaptador.

    Si no se encuentra ninguna coincidencia, cualquiera de las herramientas devolverá el mensaje de error que se muestra en la ilustración siguiente.

    Captura de pantalla que muestra el error que devuelve si no se encuentra ninguna coincidencia.

Implementación de IMetadataSearchHandler

Implementará el Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A método de la Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler interfaz . Si el nombre para mostrar de la operación coincide con los criterios de búsqueda, creará un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para esa operación y, a continuación, agregará ese objeto a una matriz de los Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos.

Para actualizar la clase EchoAdapterMetadataSearchHandler

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

  2. En el editor de Visual Studio, dentro del método Search , reemplace la lógica existente por lo siguiente. Esta lógica crea un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto si Echo/OnReceiveEcho coincide con los criterios de búsqueda especificados.

    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. Siga agregando la siguiente lógica para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto si Echo/EchoStrings coincide con los criterios de búsqueda especificados.

    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. Siga agregando la siguiente lógica para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto si Echo/EchoGreetings coincide con los criterios de búsqueda especificados.

    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. Continúe agregando el código siguiente para crear un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto si Echo/EchoGreetingFromFile coincide con los criterios de búsqueda especificados.

    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. Continúe agregando el código siguiente para devolver una matriz de Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos.

    return resultList.ToArray();  
    
  7. En Visual Studio, en el menú Archivo , haga clic en Guardar todo.

  8. 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 6: Implementar el controlador de resolución de metadatos para el adaptador de eco.

¿Qué hice?

Acaba de implementar la funcionalidad de búsqueda de metadatos del adaptador echo mediante la implementación del Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A método de la Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler interfaz . En concreto, ha creado un Microsoft.ServiceModel.Channels.MetadataRetrievalNode objeto para cada operación que coincida con los criterios y, a continuación, ha devuelto una matriz de los Microsoft.ServiceModel.Channels.MetadataRetrievalNode objetos .

Pasos siguientes

Implementará la funcionalidad de resolución de metadatos y las funcionalidades de intercambio de mensajes entrantes y salientes. Por último, compilará e implementará el adaptador echo.

Consulte también

Paso 4: Implementar el controlador de exploración de metadatos para el adaptador de Echo
Paso 6: Implementar el controlador de resolución de metadatos para el adaptador de Echo
Tutorial 1: Desarrollar el adaptador de Echo