Condividi tramite


Funzionamento del campione On-Ramp dell'itinerario

L'applicazione client di test di itinerario di esempio compila un set di intestazioni SOAP che contengono l'itinerario creato usando i controlli nella finestra dell'applicazione client, carica il file di messaggio specificato dal disco, aggiunge le intestazioni di itinerario al messaggio e lo invia a ESB tramite un percorso su rampa per l'elaborazione. Se l'itinerario genera una risposta, l'applicazione raccoglie la risposta e la visualizza nella finestra dell'applicazione.

È possibile scegliere tra diversi file di configurazione dell'itinerario di esempio per visualizzare scenari unidirezionale e bidirezionali che usano orchestrazioni, messaggistica o una combinazione di entrambi.

Per informazioni su come il servizio Itinerario usa le informazioni sull'itinerario in un messaggio, il codice XML seguente mostra il file di configurazione dell'itinerario di esempio denominato TwoWay-OrchTransform-OrchRoutingGroup-OrchTwoWayCustom.xml usato nell'esempio precedente. La prima sezione di questo itinerario specifica tre passaggi di chiamata al servizio.

<Itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" uuid="" beginTime="" completeTime="" state="Pending" isRequestResponse="false" servicecount="0" xmlns="http://schemas.microsoft.biztalk.practices.esb.com/itinerary">  
  <BizTalkSegment interchangeId="" epmRRCorrelationToken="" receiveInstanceId="" messageId="" xmlns="" />  
  <ServiceInstance name="Microsoft.Practices.ESB.Services.Transform" type="Orchestration" state="Pending" position="0" isRequestResponse="false" xmlns="" />  
  <Services xmlns="">  
    <Service uuid="92d3b293-e6d4-44a1-b27d-c42b48aec667" beginTime="" completeTime="" name="Microsoft.Practices.ESB.Services.Transform" type="Orchestration" state="Pending" isRequestResponse="false" position="0" serviceInstanceId="" />  
  </Services>  
  <Services xmlns="">  
    <Service uuid="774488bc-e5b9-4a4e-9ae7-d25cdf23fd1c" beginTime="" completeTime="" name="Microsoft.Practices.ESB.Services.Routing" type="Orchestration" state="Pending" isRequestResponse="false" position="1" serviceInstanceId="" />  
  </Services>  
  <Services xmlns="">  
    <Service uuid="" beginTime="" completeTime="" name="ProcessAndRespond" type="Orchestration" state="Pending" isRequestResponse="true" position="2" serviceInstanceId="" />  
  </Services>  
  ...  

Seguendo l'elenco dei passaggi di chiamata del servizio nell'itinerario è la sezione contenente i dettagli dei resolver (rappresentati dalle stringhe di connessione) che consentono al servizio Itinerario di individuare o fornire informazioni sulla risoluzione per ogni servizio definito nell'itinerario.

  ...  
<ResolverGroups xmlns="">  
    <Resolvers serviceId="Microsoft.Practices.ESB.Services.Transform0"><![CDATA[BRE:\\Policy=ResolveMap;Version=1.0;UseMsg=False;]]></Resolvers>  
    <Resolvers serviceId="Microsoft.Practices.ESB.Services.Routing1"><![CDATA[STATIC:\\TransportType=FILE;TransportLocation=C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Test\Filedrop\OUt\%MessageID%.xml;Action=;EndpointConfig=;JaxRpcResponse=False;MessageExchangePattern=;TargetNamespace=;TransformType=;]]><![CDATA[UDDI3:\\ServerUrl=http://localhost/uddi;SearchQualifiers=andAllKeys;CategorySearch=;BindingKey=uddi:esb:orderfileservicev3.1;]]></Resolvers>  
    <Resolvers serviceId="ProcessAndRespond2" />  
  </ResolverGroups>  
</Itinerary>  

Nota

Il contenuto effettivo di ogni <elemento Resolver> non contiene gli spazi vuoti usati per eseguire il wrapping delle righe nell'elenco precedente.

Di seguito sono riportati i tre passaggi definiti nella configurazione precedente dell'itinerario:

  1. Eseguire l'orchestrazione Microsoft.Practices.ESB.Services.Transform per trasformare il messaggio con il criterio ResolverMap usando il motore regole di business BizTalk (BRE).

  2. Eseguire l'orchestrazione Microsoft.Practices.ESB.Services.Routing per instradare il messaggio trasformato a più posizioni usando il routing di Microsoft.Practices.ESB.Services.Routing1. La <sezione ResolverGroups> contiene un <elemento Resolver> con questo identificatore, che definisce le stringhe di connessione.

  3. Eseguire l'orchestrazione ProcessAndRespond fornita con questo esempio. L'implementazione di questa orchestrazione invia come risposta una copia del messaggio di richiesta al client di test di itinerario.

    Con il completamento di ogni servizio, il servizio avanza l'itinerario e promuove il servizio successivo definito nell'itinerario per essere l'istanza del servizio corrente, con lo stato impostato su In sospeso.

Nota

L'esempio Itinerario su rampa usa la risoluzione dinamica per inviare messaggi alla cartella di output. Questo è il motivo per cui non esiste alcuna porta di trasmissione statica definita per questo esempio.

Di seguito è riportata la sequenza di eventi che si verificano dopo che l'applicazione client di test invia il messaggio:

  • La porta di ricezione OnRamp.Routey riceve il messaggio.

  • La pipeline RouteyReceiveXml estrae l'itinerario dall'intestazione SOAP, convalida e lo pre-elabora, scrive l'itinerario come proprietà del contesto di messaggio nel messaggio in ingresso e pubblica il messaggio nel database bizTalk Message Box.

  • Una sottoscrizione per l'orchestrazione del servizio Microsoft.Practices.ESB.Services.Transform attiva la chiamata di questa orchestrazione. L'orchestrazione recupera prima il passaggio dell'itinerario corrente passando il messaggio corrente come parametro, come illustrato nel codice seguente.

    itineraryStep =   itinerary.Itinerary.GetItineraryStep(InboundMessage);  
    
  • L'oggetto RouteyStep contiene tutte le informazioni sull'istanza del servizio corrente per l'esecuzione, nonché su tutti i resolver associati.

  • L'oggetto Resolver viene recuperato dall'istanza di RouteyStep e viene usato Il framework di risoluzione ESB per risolvere il nome completo della mappa di trasformazione, come illustrato nel codice seguente.

    resolverDictionary =   
       Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(InboundMessage,  
                                                            resolver);  
    
    // Set the transform type.  
    transformType = resolverDictionary.Item("Resolver.TransformType");  
    
  • Microsoft BizTalk ESB Toolkit Resolver and Adapter Framework esegue questa operazione caricando il resolver appropriato dalla cache (in questo esempio, il sistema di risoluzione delle regole di business BizTalk), che richiama il criterio ResolverMap e popola l'oggetto ResolverDictionary .

  • Al termine dell'orchestrazione, il codice chiama il metodo AdvanceItinerary , come illustrato nel codice seguente.

    // Call the Itinerary helper to advance to the next step.  
    itinerary.Itinerary.Advance(OutboundMessage, itineraryStep.ItineraryStep);  
    
  • In questo modo l'itinerario corrente viene aggiornato aggiornando le proprietà e promuovendo il servizio successivo definito nell'itinerario come quello da eseguire successivamente. Il metodo copia l'itinerario nel messaggio in uscita, che il servizio pubblica nuovamente nel database Message Box tramite una porta di invio associata diretta.

  • Una sottoscrizione per l'orchestrazione del servizio Microsoft.Practices.ESB.Services.Delivery attiva la chiamata di questa orchestrazione. Questa orchestrazione segue un processo simile al primo, ottenendo il passaggio itinerario corrente. Tuttavia, questa orchestrazione esegue l'iterazione tramite una raccolta di resolver restituiti dall'istanza di RouteyStep . Per ogni sistema di risoluzione nella raccolta, l'orchestrazione di recapito usa Microsoft BizTalk ESB Toolkit Resolver e Adapter Framework per risolvere i percorsi di trasporto e promuoverli come proprietà di contesto all'interno del messaggio in uscita, come illustrato nel codice seguente.

    // Move to retrieve the first resolver.  
    resolver = resolvers.Current;  
    
    // Pass the resolver configuration to the Resolver Manager   
    // for resolution.  
    resolverDictionary =  
       Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(InboundMessage,  
                                                            resolver);  
    
    // Set the transport properties.  
    transportLocation =   
       resolverDictionary.Item("Resolver.TransportLocation");  
    transportType =   
       resolverDictionary.Item("Resolver.TransportType");  
    
    // Call the Adapter Manager to set all necessary properties.  
    Microsoft.Practices.ESB.Adapter.AdapterMgr.SetEndpoint(  
                                    resolverDictionary, DeliveryMessage);  
    
    // Set the delivery port address and type.  
    DeliveryPort(Microsoft.XLANGs.BaseTypes.Address) = transportLocation;  
    DeliveryPort(Microsoft.XLANGs.BaseTypes.TransportType) = transportType;  
    
  • Una sottoscrizione per l'orchestrazione ProcessAndRespond attiva la chiamata di questa orchestrazione a causa di una corrispondenza delle proprietà del contesto del messaggio definite per le proprietà dell'espressione di filtro.

    (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceName == :"ProcessAndRespond")   
    && Microsoft.Practices.ESB.Itinerary.Schemas.ServiceState == "Pending")  
    && (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceType == "Orchestration")  
    
  • L'orchestrazione ProcessAndRespond avanza l'itinerario e invia nuovamente il messaggio di richiesta originale al servizio su rampa all'applicazione Client di test itinerario come risposta.