Condividi tramite


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);