Question

Je ne suis pas sûr si j'ai poser la bonne question, mais c'est le scénario que je suis en train de lancer:

Plusieurs fichiers XML (et quelques fichiers, des "pièces jointes") ont pour entrer dans BizTalk comme un seul message.J'ai regardé dans les adaptateurs existants, et ne vois pas que faire avec les une fois.Pour être plus précis, les fichiers sont prises à partir d'un fichier système.Les fichiers ne sont pas trouvés dans le même temps, mais arriver à un moment, quand l'ordre n'est pas assurée.XML (contenu) le fichier est celui qui sait ce que les pièces jointes, il doit avoir (ce que les autres fichiers).

Nous sommes à la recherche dans BizTalk 2009 et je me demandais serait que la responsabilité d'une coutume Adaptateur, ou quelque chose d'autre.Et je pourrais regarder pour les échantillons.

Merci.

Était-ce utile?

La solution

Il est sans doute possible de faire ce que vous voulez en utilisant un adaptateur personnalisé, bien que je vous recommande contre. Vous pouvez réaliser ce que vous avez besoin à l'aide d'orchestration.

Ce que vous recherchez est likey un convoi, ou au moins une certaine utilisation de corrélation.

Dans BizTalk un convoi est un motif de messagerie (par opposition une option BizTalk) qui permet à des groupes de messages à traiter par une seule orchestration.

Vous utilisez essentiellement la corrélation sur un port de réception des messages de groupe ensemble soit un parallèle (ce que vous voulez probablement) ou de manière séquentielle.

Il y a un article [ici] ( http : //msdn.microsoft.com/en-us/library/ms942189 (BTS.10) .aspx) par Stephen W. Thomas au sujet des convois (il est pour BT 2004, mais les concepts tiennent encore) et il est beaucoup d'informations supplémentaires sur le web et dans les livres (serveur BizTalk 2006 Professional a une sous-section sur les)

Sans plus de détails sur votre scénario, il est difficile de savoir exactement comment le convoi serait construit mais au-dessous sont deux approches pour regarder (aussi, je ne l'ai pas eu la chance d'utiliser correctement BT2009 donc il peut être prolongé soutien scénarios de corrélation qui vous aider).

Corrélation flexible

Si vous ne savez pas quoi que ce soit sur les fichiers répertoriés dans le fichier XML de contexte, vous aurez probablement besoin d'un modèle comme celui décrit par Charles Young dans ce poste .

convoi séquentiel non uniforme

Si vous avez un peu d'information avant de la main d'une façon peut-être comme suit (essentiellement un convoi séquentiel non uniforme):

Cela rend l'hypothèse qu'il existe un moyen de relier tous les fichiers ensemble afin que vous puissiez les corréler.

Créer une seule orchestration que vous abonné à Entrant port de réception (qui contient le fichier emplacement de réception).

Cette orchestration aura une seule activation recevoir la forme qui est mis en place pour votre fichier de contenu.

Une fois l'orchestration est démarré par un contenu du fichier une deuxième forme corrélée réception commence ramasser les messages qui correspondent à ce fichier contenu. (Ce second pourrait recevoir possible dans une boucle pour permettre un nombre variable de fichiers)

Vous les alors regrouper tous ensemble dans un seul fichier sortant de votre conception et de les envoyer une fois que le nombre total de fichiers a été reçu.

Autres conseils

Il me semble une meilleure approche serait de mettre en œuvre les exigences ci-dessus avec une combinaison d'un composant de pipeline personnalisé et / ou un adaptateur personnalisé. Je suppose que vous avez vraiment pas besoin de manipuler les fichiers entrants - sauf pour le fichier XML de contenu - ou que vous ne pouviez pas car ils sont au format binaire. Cela nécessite un composant de pipeline personnalisé.

Ce que vous pouvez faire est de développer un adaptateur BizTalk personnalisé pour interagir avec le système de fichiers et de mettre en œuvre la logique d'écoute et en boucle. Ensuite, vous pouvez développer un composant de pipeline personnalisé pour créer un seul message BizTalk peut-être avec le type de données base64 pour les données binaires. En outre, vous pouvez également promouvoir des messages droit dans ce composant pour permettre aux abonnements d'orchestration.

Orchestrations sont plus adaptés à la mise en œuvre des travaux de scénarios de flux commerciaux où les messages sont déjà au format XML. Cela ne semble pas être le cas. En tout cas, je pense à tout le moins un composant de pipeline personnalisé serait nécessaire.

David réponse est la réponse correcte.

Même dans le cas où vous ne savez absolument rien sur le contenu attendu des pièces jointes, vous connaissez sûrement leurs noms et les lieux.Par conséquent, vous pouvez utiliser le Flexible De Corrélation liés à de david réponse comme ceci:

La clé de la solution est de corréler la builtin BTS.ReceivedFileName de la propriété.

Tout d'abord, créer un pipeline de réception personnalisée, avec un composant de pipeline personnalisé qui favorise le BTS.ReceivedFileName contexte de la propriété des messages reçus.Cette simple composant personnalisé est assez facile à écrire, mais vous pouvez faire simple en utilisant de tiers des cadres tels que, (shameless plug, ici) mon PipelineComponentBase de la classe ou de l'excellent BizTalk Server Composant De Pipeline Assistant.

Maintenant pour la partie la plus facile:

  • Les pièces jointes sont reçus dans un emplacement spécifique, désigné par son chemin d'accès sur le système de fichiers.
  • Créer un emplacement de réception à l'écoute de un autre emplacement, utilisée uniquement pour le contrôle lorsque les fichiers sont en fait avalé par BizTalk.
  • Dans l'orchestration, de créer une corrélation de type avec le BTS.ReceivedFileName de la propriété et un ensemble de corrélation de base sur ce type de corrélation.
  • Lorsque vous souhaitez recevoir des pièces jointes binaires, envoyer un message fictif avec le BTS.ReceivedFileName contexte bien défini pour le nom de fichier de la pièce jointe binaire, mais avec le chemin d'accès correspondant à la autre emplacement ;celui utilisé par l'emplacement de réception.Initialiser la corrélation sur la forme d'envoi.
  • L'utilisation d'une forme d'expression pour copier le fichier binaire à partir de son emplacement d'origine à celui utilisé par l'emplacement de réception.
  • Enfin, l'utilisation d'une forme de réception lié au port de réception qui contient l'emplacement de réception dont le pipeline de réception personnalisée fera la promotion de la BTS.ReceivedFileName de la propriété.

Notez que vous avez réellement besoin d'envoyer un message pour initialiser la corrélation.Il n'a pas d'importance quel est le message que vous envoyez en fait.Ce que je voudrais faire est d'envoyer le message via un pipeline d'envoi qui contient un vide composant de pipeline.C'est un composant de pipeline qui lit le message, mais de retourner la valeur null (de sorte que le message disparaît dans les airs avant qu'il atteigne la carte).Une description plus détaillée de la solution serait d'utiliser un null l'adaptateur.C'est un adaptateur qui lit le message, mais ne pas faire quelque chose à ce sujet.

Ces deux solutions éviter d'avoir de nombreux fichiers s'accumulent dans un emplacement temporaire, quelque part, juste pour le plaisir de l'initialisation d'une corrélation!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top