Paso 5: Implementar el controlador de búsqueda de metadatos para el adaptador de Echo
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.
Búsqueda 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 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 .
Si no se encuentra ninguna coincidencia, cualquiera de las herramientas devolverá el mensaje de error que se muestra en la ilustración siguiente.
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
En Explorador de soluciones, haga doble clic en el archivo EchoAdapterMetadataSearchHandler.cs.
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); }
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); }
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); }
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); }
Continúe agregando el código siguiente para devolver una matriz de
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
objetos.return resultList.ToArray();
En Visual Studio, en el menú Archivo , haga clic en Guardar todo.
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