Paso 4: Implementar el controlador de exploración de metadatos para el adaptador de Echo
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%2A
false
. Para especificar un nodo como operación, establezca en Microsoft.ServiceModel.Channels.MetadataRetrievalNode.IsOperation%2A
true
.
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 ("/"):
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:
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:
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
En Explorador de soluciones, haga doble clic en el archivo EchoAdapterMetadataBrowseHandler.cs.
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.
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 }; }
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;
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;
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;
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;
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;
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 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