Verwenden von Resolverkomponenten in Code

Das folgende Codefragment aus dem Dynamischen Transformations-Agent zeigt die standardmäßige JIT-Auflösungsfunktionalität (Just-in-Time). Mithilfe von ähnlichem Code können Sie die Auflösung problemlos in Ihrer eigenen Anwendung implementieren.

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

In der vorherigen Auflistung gibt die Resolve-Methode der ResolverMgr-Klasse ein Dictionary-Objekt zurück, das alle Standardauflösungseigenschaften und deren aufgelöste Werte enthält. Jeder benutzerdefinierte Resolver kann dem Dictionary-Objekt benutzerdefinierte Eigenschaften hinzufügen. Dadurch werden diese Eigenschaften jedem benutzerdefinierten Reiseplandienst zur Verfügung gestellt.

Die folgende Tabelle zeigt die Eigenschaften, die optional von den Im Microsoft BizTalk ESB Toolkit enthaltenen Resolvern aufgefüllt werden können. Jeder Reiseroutendienst kann diese Eigenschaftswerte abrufen, indem er sie aus dem zurückgegebenen Dictionary-Objekt extrahiert.

Eigenschaften:

     
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

Nachdem der Resolver-Manager das Dictionary-Objekt instance zurückgibt, legt der Adapter-Manager die spezifischen Eigenschaften des BizTalk-Adapterkontexts der Nachricht fest. Das folgende Codefragment aus dem Routing-Agent veranschaulicht, wie Sie den Adapter-Manager verwenden können, um die Endpunkteigenschaften der ausgehenden Nachricht festzulegen.

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

Das folgende Codefragment aus dem Routing-Agent veranschaulicht, wie Sie den Adapter-Manager aus einer benutzerdefinierten Pipelinekomponente verwenden, um die Endpunkteigenschaften einer ausgehenden Nachricht festzulegen.

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