Domanda

Non sono sicuro se chiedo la domanda giusta, ma questo è lo scenario che sto cercando di eseguire:

Più file XML (e alcuni file correlati, "Allegati") non hanno di entrare in BizTalk come un unico messaggio. Ho esaminato gli adattatori esistenti, e non vedo che fatto con esistenti una volta. Per essere più precisi, i file sono presi dal file system. File non si trovano allo stesso tempo, ma arrivano uno alla volta, quando l'ordine non è garantita. file XML (il contenuto) è quella che sa cosa gli allegati deve avere (quali altri file).

Stiamo cercando in BizTalk 2009 e mi chiedevo sarebbe che la responsabilità di un adattatore personalizzato, o qualcos'altro. E se fossi potuto guardare per i campioni.

Grazie.

È stato utile?

Soluzione

Probabilmente è possibile fare ciò che si desidera utilizzare un adattatore personalizzato, anche se io consiglierei contro di essa. È possibile ottenere ciò che si richiede utilizzando orchestrazione.

Quello che state cercando è likey un convoglio, o almeno un certo uso di correlazione.

In BizTalk un convoglio è un modello di messaggistica (come opposto ad una funzione BizTalk) che consente gruppi di messaggi da elaborare da un singolo orchestrazione.

È essenzialmente utilizzare la correlazione su una porta di ricezione di messaggi di gruppo insieme a scelta in parallelo (quello che probabilmente si desidera) oppure sequenziale.

C'è un articolo [qui] ( http : //msdn.microsoft.com/en-us/library/ms942189 (BTS.10) aspx) da Stephen W. Thomas su convogli (è per BT 2004, ma i concetti continuano a detenere) e non c'è un sacco di informazioni aggiuntive sul web e nei libri (server BizTalk professionista 2006 ha una sottosezione su di loro)

Senza maggiori dettagli sul tuo scenario è difficile sapere esattamente come il convoglio sarebbe stato costruito, ma di seguito sono due approcci per guardare (anche, non ho avuto la possibilità di utilizzare correttamente BT2009 quindi non ci può essere prorogato il supporto per scenari di correlazione che aiutano fuori).

Correlazione flessibile

Se non si sa nulla di file elencati nel contesto XML probabilmente avrete bisogno di un modello come quello descritto da Charles Young in questo post .

non uniforme convoglio sequenziale

Se avete un po 'di informazioni di prima mano in un modo potrebbe essere la seguente (in pratica un convoglio sequenziale non uniforme):

In questo modo l'ipotesi che ci sia un modo di collegare tutti i file insieme in modo da poterli correlare.

Crea un singolo di orchestrazione che sottoscrive a voi in entrata porta di ricezione (che contiene il file riceve la posizione).

Questa orchestrazione avrà una singola attivazione riceve la forma che è impostato per il file di contenuto.

Una volta che l'orchestrazione è iniziata da un contenuto di file una seconda correlata ricevere forma inizia raccogliendo i messaggi che corrispondono quel file contenuti. (Questo secondo riceve potrebbe essere possibile in un ciclo per consentire un numero variabile di file)

È quindi imballare tutte insieme in un unico file in uscita del vostro disegno e inviarli fuori una volta è stato ricevuto il numero totale di file.

Altri suggerimenti

Mi sembra un approccio migliore sarebbe quello di implementare i requisiti di cui sopra con una combinazione di un componente di pipeline personalizzata e / o di un adattatore personalizzato. Presumo che non si ha realmente bisogno di manipolare i file in arrivo - fatta eccezione per il file XML contenuti - o che non si poteva dal momento che sono in formato binario. Ciò richiede un componente della pipeline personalizzato.

Che cosa si può fare è sviluppare un adattatore BizTalk personalizzato per interagire con il file system e per implementare la logica di ascolto e loop. Poi si può sviluppare un componente della pipeline personalizzato per creare un singolo messaggio di BizTalk magari con tipo di dati base64 in esso per i dati binari. Inoltre si potrebbe anche promuovere messaggi proprio in questo componente per abilitare le sottoscrizioni di orchestrazione.

orchestrazioni sono più adatti per l'implementazione di scenari di work-flow di business in cui i messaggi sono già in formato XML. Questo non sembra essere il caso. In ogni caso penso al sarebbe necessaria per lo meno un componente di pipeline personalizzata.

La risposta di David è la risposta corretta.

Anche nei casi in cui non si sa assolutamente nulla circa il contenuto degli allegati previsti, sicuramente si conoscono i loro nomi e le posizioni. Pertanto è possibile utilizzare il Correlazione flessibile legato al risposta di David in questo modo:

La chiave per la soluzione è quella di correlare sulla proprietà BTS.ReceivedFileName incorporato.

In primo luogo, creare una pipeline di ricezione personalizzata, con una componente di pipeline personalizzata che promuove la proprietà di contesto BTS.ReceivedFileName dei messaggi ricevuti. Questo semplice componente personalizzato è abbastanza facile da scrivere, ma si può rendere semplice utilizzando framework di terze parti come ad esempio, ( senza vergogna, qui ) la mia PipelineComponentBase classe o l'eccellente BizTalk Server pipeline componente guidata .

Ora per la parte più semplice:

  • Allegati sono ricevuti in una posizione specifica, designata con il suo percorso sul filesystem.
  • Creare un indirizzo di ricezione che ascolta un percorso alternativo , usato solo per controllare quando i file vengono effettivamente ingerite da BizTalk.
  • Nella tua orchestrazione, creare un tipo di correlazione con la proprietà BTS.ReceivedFileName e un set base di correlazione su questo tipo di correlazione.
  • Quando si desidera ricevere allegati binari, inviare un messaggio fittizio con il contesto di proprietà BTS.ReceivedFileName impostata sul nome del file allegato binario, ma con il percorso corrispondente al percorso alternativo ; quella usata da l'indirizzo di ricezione. Inizializzare la correlazione sulla forma di invio.
  • Utilizza una forma di espressione per copiare il file binario dalla sua posizione originale a quella usata dai l'indirizzo di ricezione.
  • Infine, utilizzare una forma ricevere legato alla porta di ricezione che contiene l'indirizzo di ricezione cui pipeline di ricezione personalizzata promuoverà la proprietà BTS.ReceivedFileName.

Si noti che è effettivamente necessario per inviare un messaggio al fine di inizializzare la correlazione. Non importa quale messaggio che si invia in realtà. Quello che mi piacerebbe fare è inviare il messaggio attraverso una pipeline di trasmissione che contiene un Vuoto componente della pipeline. Questo è un componente della pipeline che legge il messaggio, ma di ritorno null (in modo che il messaggio svanisce nel nulla prima che raggiunga l'adattatore). Una soluzione più elaborata sarebbe quella di utilizzare un nullo adattatore. Questo è un adattatore che legge il messaggio, ma non fa nulla.

Queste due soluzioni evitare di avere molti file si accumulano in una posizione temporanea da qualche parte, solo per il gusto di inizializzazione una correlazione!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top