2010-03-29 2 views
6

Je me demandais si quelqu'un sait où je peux voir les données d'un message suspendu dans la base de données biztalk.Biztalk a suspendu les messages dans la base de données

J'ai besoin de cela parce qu'environ 900 messages ont été suspendus à cause d'une validation et que j'ai besoin de tous les éditer, la reprise n'est pas possible.

Je sais que l'information des messages suspendus est montrée dans BizTalkMsgBoxDb dans la table InstancesSuspended et que les différentes parties de chaque message sont montrées dans la table MessageParts. Cependant je ne peux pas trouver la table où les données réelles sont stockées.

Est-ce que quelqu'un a une idée de ce qui peut être fait?

Répondre

1

I trouvé un moyen de le faire, il n'y a pas de foutu de mon système quand je veux juste les lire.

Comment je l'ai fait est en utilisant la méthode "CompressionStreams" en utilisant Microsoft.Biztalk.Pipeline.dll.

La méthode pour ce faire:

public static Stream getMsgStrm(Stream stream) 
    { 
     Assembly pipelineAssembly = Assembly.LoadFrom(string.Concat(@"<path to dll>", @"\Microsoft.BizTalk.Pipeline.dll")); 
     Type compressionStreamsType = pipelineAssembly.GetType("Microsoft.BizTalk.Message.Interop.CompressionStreams", true); 
     return (Stream)compressionStreamsType.InvokeMember("Decompress", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, new object[] { (object)stream }); 
    } 

Puis je me connecte avec ma base de données, remplir un ensemble de données et diffusez les données à la chaîne, le code:

 String SelectCmdString = "select * from dbo.Parts"; 
     SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(SelectCmdString, "<your connectionstring">); 
     DataSet myDataSet = new DataSet(); 
     mySqlDataAdapter.Fill(myDataSet, "BodyParts"); 

     foreach (DataRow row in myDataSet.Tables["BodyParts"].Rows) 
     { 
      if (row["imgPart"].GetType() != typeof(DBNull)) 
      { 
       SqlBinary binData = new SqlBinary((byte[])row["imgPart"]); 
       MemoryStream stm = new MemoryStream(binData.Value); 
       Stream aStream = getMsgStrm(stm); 
       StreamReader aReader = new StreamReader(aStream); 

       string aMessage = aReader.ReadToEnd(); 

       //filter msg 
       //write msg 
      } 
     } 

je puis écrire chaque chaîne à un "txt" ou "xml" approprié selon ce que vous voulez, vous pouvez également filtrer certains messages avec l'expression régulière, etc.

Espérons que cela aide n'importe qui, c'est sûr que l'enfer m'a aidé.

Salutations

0

Ceci est plus que probablement pas pris en charge par Microsoft. Ne risquez pas de vider votre système. Si vous avez besoin d'une modification et d'une nouvelle soumission, elle doit être intégrée à l'orchestration. Dans le cas contraire, votre meilleur pari est d'utiliser WMI pour écrire un script pour:

  1. retirer tous les messages suspendus
  2. les arrêter
  3. modifier les
  4. les soumettre à nouveau
+0

Alors, pourquoi le score négatif? Je serais curieux d'entendre ce que vous pensez est. –

+0

Je pense quand il a répondu à sa première ligne a été ciblée à vous "il n'y a pas de foutu de mon système quand je veux juste les lire" ... – Nix

+0

+1 pour @ChrisLoris. Le conseil d'utiliser WMI et de mettre fin aux messages suspendus est solide. L'autre partie du conseil est peut-être plus formelle: «Microsoft ne prend pas en charge l'accès direct à la base de données BizTalk, car les futures versions de BizTalk peuvent modifier le schéma, etc. Dans cet esprit, considérez que la solution donnée peut avoir besoin d'être modifiée si une nouvelle version de production ou même un correctif est installé. –

0

vous pouvez le trouver à travers l'outil HAT il vous suffit de spécifier le schéma, le port et la date exacte avec l'heure exacte et il affiche les messages clic droit sur celui de votre choix et enregistrez .

1

Messages Extraire des instances en suspension

Scénario:

BizTalk 2010 et SQL 2008 R2 est l'environnement que nous avons utilisé avant ce scénario.

Vous avez un problème avec certaines intégrations, 1500 instances suspendues à l'intérieur de BizTalk et vous devez envoyer les messages réels à un client, puis vous ne voulez pas sauvegarder manuellement cela de BizTalk Administrator.

Il ya beaucoup de blogs et de ressources Internet qui signalent les scripts VBS, PowerShell comment faire cela, mais j'ai utilisé BizTalk Terminator pour résoudre ce genre de scénarios.

Comme vous maintenant terminaison BizTalk vous demande 3 questions lorsque l'outil commence

I.1.All bases de données BizTalk sont sauvegardés? II.2.Toutes les instances hôtes sont-elles arrêtées? III.3.Tous les agents SQL BizTalk sont-ils arrêtés? Ceci est correct lorsque vous allez réellement changer quelque chose dans les bases de données BizTalk mais ce n'est pas ce que vous allez faire dans ce scénario que vous utilisez uniquement l'outil pour lire des bases de données BizTalk. Mais vous devriez toujours avoir des sauvegardes des bases de données BizTalk.

Vous êtes toujours responsable de ce que vous faites, mais lorsque nous avons utilisé ces outils de la manière que je décris, nous n'avons aucun problème avec ce scénario. Donc, après avoir démarré l'outil Terminator, cliquez sur oui pour les 3 questions (vous n'avez rien à arrêter dans ce scénario) puis connectez-vous à l'environnement correct, faites d'abord cela dans votre environnement de test pour vous sentir à l'aise avec ce scénario. , l'étape suivante consiste à choisir une tâche de terminaison choisissez Count Instances (et enregistrer les messages) après que vous devez remplir le paramètre TAB avec serviceClass et Hostname corrects et définir SaveMessages sur True et SetavesFullPath en dernier dans le bon dossier que vous souhaitez enregistrer les messages à.

Ensuite, vous pouvez choisir de cliquer sur le bouton Execute et en fonction de la taille et combien cela peut prendre du temps, après cette déconnexion Terminator ne font rien d'autre.

Vous devriez maintenant, si vous avez rempli les bonnes valeurs dans le paramètre TAB, avoir les messages sauvegardés dans le dossier FilesaveFullPath.

Télécharger terminaison BizTalk à partir de cette adresse:

http://www.microsoft.com/en-us/download/details.aspx?id=2846

Questions connexes