Uso dei componenti del resolver nel codice
Il frammento di codice seguente dall'agente di trasformazione dinamico mostra la funzionalità di risoluzione JIT (Just-In-Time) predefinita. È possibile implementare facilmente la risoluzione nella propria applicazione usando codice simile.
//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");
Nell'elenco precedente, il metodo Resolve della classe ResolverMgr restituisce un oggetto Dictionary contenente tutte le proprietà di risoluzione predefinite e i relativi valori risolti. Qualsiasi resolver personalizzato può aggiungere proprietà personalizzate all'oggetto Dictionary ; in questo modo queste proprietà sono disponibili per qualsiasi servizio itinerario personalizzato.
La tabella seguente illustra le proprietà che possono essere popolate facoltativamente dai resolver inclusi in Microsoft BizTalk ESB Toolkit. Qualsiasi servizio di itinerario può recuperare questi valori di proprietà estratto dall'oggetto Dictionary restituito.
Proprietà:
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 |
Dopo aver restituito l'istanza dell'oggetto Dictionary , la gestione adapter imposta le proprietà del contesto dell'adapter BizTalk specifiche del messaggio. Il frammento di codice seguente dell'agente di routing illustra come usare la gestione adapter per impostare le proprietà dell'endpoint del messaggio in uscita.
//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;
Il frammento di codice seguente dell'agente di routing illustra come usare la gestione adattatori dall'interno di un componente della pipeline personalizzata per impostare le proprietà dell'endpoint di un messaggio in uscita.
// 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);