Uso de los componentes de resolución en el código
El siguiente fragmento de código del agente de transformación dinámica muestra la funcionalidad de resolución Just-In-Time (JIT) predeterminada. Puede implementar fácilmente la resolución en su propia aplicación mediante código similar.
//XLANGs
itinerary = new Microsoft.Practices.ESB.Itinerary.SerializableItineraryWrapper();
step = new Microsoft.Practices.ESB.Itinerary.SerializableItineraryStepWrapper();
itinerary.Itinerary = Microsoft.Practices.ESB.Itinerary.ItineraryOMFactory.Create(InboundMessage);
step.ItineraryStep = itinerary.Itinerary.GetItineraryStep(InboundMessage);
resolvers = step.ItineraryStep.ResolverCollection;
resolvers.MoveNext();
resolver = resolvers.Current;
// Pass the resolver configuration to the Resolver mgr for resolution.
resolverDictionary = Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(InboundMessage, resolver);
// Set the transform type.
transformType = resolverDictionary.Item("Resolver.TransformType");
En la lista anterior, el método Resolve de la clase ResolverMgr devuelve un objeto Dictionary que contiene todas las propiedades de resolución predeterminadas y sus valores resueltos. Cualquier solucionador personalizado puede agregar propiedades personalizadas al objeto Dictionary ; esto hace que esas propiedades estén disponibles para cualquier servicio de itinerario personalizado.
En la tabla siguiente se muestran las propiedades que pueden rellenar opcionalmente los solucionadores incluidos en microsoft BizTalk ESB Toolkit. Cualquier servicio de itinerarios puede recuperar estos valores de propiedad extrayendolos del objeto Dictionary devuelto.
Propiedades:
Resolver.Action | Resolver.ActionField | Resolver.DocumentSpecName |
Resolver.Success | Resolver.EndpointConfig | Resolver.DocumentSpecStrongName |
Resolver.FixJaxRpc | Resolver.InboundTransportType | Resolver.EpmRRCorrelationToken |
Resolver.InterchangeId | Resolver.IsRequestResponse | Resolver.InboundTransportLocation |
Resolver.MessageType | Resolver.MethodName | Resolver.MessageExchangePattern |
Resolver.ReceivePortName | Resolver.TransportLocation | Resolver.OutboundTransportCLSID |
Resolver.TransformType | Resolver.TargetNamespace | Resolver.ReceiveLocationName |
Resolver.TransportType | Resolver.TransportNamespace | Resolver.WindowUserField |
Resolver.CacheTimeout |
Después de que el administrador de resolución devuelva la instancia de objeto Dictionary , el administrador de adaptadores establece las propiedades específicas del contexto del adaptador de BizTalk del mensaje. El siguiente fragmento de código del agente de enrutamiento muestra cómo puede usar el administrador de adaptadores para establecer las propiedades del punto de conexión del mensaje saliente.
//XLANGs
// Set the transport properties.
transportLocation = resolverDictionary.Item("Resolver.TransportLocation");
transportType = resolverDictionary.Item("Resolver.TransportType");
// Create the delivery message.
DeliveryMessage = InboundMessage;
// Call the adapter manager to set all necessary properties on the message.
Microsoft.Practices.ESB.Adapter.AdapterMgr.SetEndpoint(
resolverDictionary,DeliveryMessage);
// Set the delivery port address.
DeliveryPort(Microsoft.XLANGs.BaseTypes.Address) = transportLocation;
DeliveryPort(Microsoft.XLANGs.BaseTypes.TransportType) = transportType;
El siguiente fragmento de código del agente de enrutamiento muestra cómo usar el administrador de adaptadores desde un componente de canalización personalizado para establecer las propiedades del punto de conexión de un mensaje saliente.
// Resolve the configuration for routing.
ResolverDictionary = ResolverMgr.Resolve(info, pInMsg, pContext);
// Call the adapter manager to set all required message properties.
AdapterMgr.SetEndpoint(ResolverDictionary, pInMsg.Context);