2010-03-29 31 views
6

Zastanawiam się, czy ktoś wie, gdzie mogę zobaczyć dane zawieszonej wiadomości w bazie danych biztalk.Wiadomości zawieszone w Biztalk w bazie danych

Potrzebuję tego, ponieważ około 900 wiadomości zostało zawieszonych z powodu walidacji i muszę je wszystkie edytować, wznowienie nie jest możliwe.

Wiem, że informacje o zawieszonych wiadomościach są wyświetlane w BizTalkMsgBoxDb w tabeli InstancesSuspended, a różne części każdej wiadomości są pokazane w tabeli MessageParts. Jednak nie mogę znaleźć tabeli, w której przechowywane są aktualne dane.

Czy ktoś ma pojęcie, gdzie można to zrobić?

Odpowiedz

1

I Znalazłem sposób, aby to zrobić, nie ma żadnych problemów z moim systemem, kiedy chcę je czytać.

Jak to zrobiłem, używam metody "CompressionStreams" przy użyciu pliku Microsoft.Biztalk.Pipeline.dll.

metoda, aby to zrobić:

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

Potem połączyć z mojej bazy danych, należy wypełnić w zbiorze danych i strumień się dane do łańcucha, kod:

 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 
      } 
     } 

I następnie napisać każdy łańcuch do odpowiedniego "txt" lub "xml" w zależności od tego, co chcesz, możesz również odfiltrować określone wiadomości z regularnym wyrażeniem, itp.

Mam nadzieję, że to pomoże każdemu, to na pewno mi pomogło.

Pozdrowienia

0

To prawdopodobnie nie jest obsługiwane przez firmę Microsoft. Nie ryzykuj skręcenia systemu. Jeśli masz potrzebę edycji i ponownego przesłania, musisz ją włączyć do orkiestracji. W przeciwnym razie, najlepiej jest użyć WMI napisać skrypt do:

  1. wyciągnąć wszystkich zawieszonych wiadomości
  2. zakończyć je
  3. edytować je
  4. ponownie przesłać im
+0

Więc dlaczego negatywny wynik? Chciałbym usłyszeć, o czym myślisz. –

+0

Myślę, że kiedy odpowiedział, jego pierwsza linia była skierowana do ciebie "nie ma żadnych problemów z moim systemem, kiedy chcę je przeczytać" ... – Nix

+0

+1 dla @ChrisLoris. Porada dotycząca korzystania z usługi WMI i kończenia zawieszonych wiadomości jest prawidłowa. Druga część porad jest prawdopodobnie bardziej formalnie określana jako "Microsoft nie wspiera bezpośredniego dostępu do bazy danych BizTalk." Przyszłe wersje BizTalk mogą zmieniać schemat, itp. ". Mając to na uwadze, należy wziąć pod uwagę, że podane rozwiązanie może wymagać modyfikacji w przypadku zainstalowania nowej wersji produkcyjnej lub nawet poprawki. –

0

można go znaleźć przez narzędzie HAT wystarczy podać schemat, port i dokładną datę z dokładnym czasie i będzie wyświetlał komunikaty prawym przyciskiem myszy na żądanym jednym i zapisz .

1

Wyciąg Wiadomości z zawieszonymi przypadkach

Scenariusz:

BizTalk 2010 i SQL 2008 R2 jest środowisko użyliśmy dziobowy tego scenariusza.

Masz problem z niektórymi integracjami, 1500 zawieszonych instancji w BizTalk i musisz wysłać rzeczywiste wiadomości do klienta, a następnie właściwie nie chcesz ręcznie zapisywać tego z BizTalk Administrator.

Istnieje wiele blogów i zasobów internetowych wskazujących vbs, skrypty powershell, jak to zrobić, ale użyłem BizTalk Terminator do rozwiązania tego rodzaju scenariuszy.

Jak teraz BizTalk terminator prośbą 3 pytania, gdy narzędzie zacznie

baz

I.1.All BizTalk są wspierane? II.2. Czy wszystkie wystąpienia hosta są zatrzymane? III.3. Czy agenci SQL BizTalk są zatrzymani? Jest to ok, jeśli zamierzasz zmienić coś w bazie danych BizTalk, ale nie jest to to, co zamierzasz zrobić w tym scenariuszu, używasz tego narzędzia tylko do odczytu z baz danych BizTalk. Ale zawsze powinieneś mieć kopie zapasowe baz danych BizTalk.

Jesteś zawsze odpowiedzialny za to, co robisz, ale kiedy użyliśmy tych narzędzi w sposób, który opisuję, nie mamy żadnego problemu z tym scenariuszem.

Po uruchomieniu narzędzia Terminator kliknij przycisk Tak na 3 pytania (nie musisz nic w tym scenariuszu przerwać), a następnie połącz się z odpowiednim środowiskiem. Zrób to najpierw w środowisku testowym, abyś czuł się komfortowo z tym scenariuszem , następnym krokiem jest wybór zadania terminatora, wybierz Count Instances (i zapisz komunikaty), po czym musisz wpisać parametr TAB z poprawną serviceClass i nazwą hosta i ustawić SaveMessages na True, a ostatni ustawić FilesaveFullPath na właściwy folder, który chcesz zapisać wiadomości do.

Następnie można kliknąć przycisk Wykonaj iw zależności od rozmiaru i ilości czasu może to zająć trochę czasu, po tym rozłączeniu Terminator NIE robi nic innego.

Powinieneś teraz, jeśli wypełniłeś poprawne wartości w parametrze TAB mają zapisane wiadomości wewnątrz folderu FilesaveFullPath.

Pobierz BizTalk terminator z tego adresu:

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