Biztalk заблокировал сообщения в базе данных

Мне было интересно, знает ли кто-нибудь, где я могу увидеть данные приостановленного сообщения в базе данных biztalk.

Мне это нужно, потому что около 900 сообщений были приостановлены из-за проверки, и мне нужно отредактировать их все, возобновление невозможно.

Я знаю, что информация о приостановленных сообщениях показана в BizTalkMsgBoxDb в таблице InstancesSuspended и что различные части каждого сообщения показаны в таблице MessageParts. Однако я не могу найти таблицу, в которой хранятся фактические данные.

Кто-нибудь знает, где это можно сделать?


person WtFudgE    schedule 29.03.2010    source источник


Ответы (4)


Я нашел способ сделать это, моя система не испортится, когда я просто хочу их прочитать.

Я сделал это с помощью метода «CompressionStreams» с использованием Microsoft.Biztalk.Pipeline.dll.

Способ сделать это:

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

Затем я подключаюсь к своей базе данных, заполняю набор данных и вывожу данные в строку, код:

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

Затем я записываю каждую строку в соответствующий «txt» или «xml» в зависимости от того, что вы хотите, вы также можете отфильтровать определенные сообщения с помощью регулярного выражения и т. д.

Надеюсь, это поможет кому-нибудь, это, черт возьми, помогло мне.

Привет

person WtFudgE    schedule 30.03.2010
comment
Каждый раз, когда я пишу инструмент .NET для общения с BizTalk, мне всегда нужно, чтобы он работал на сервере BizTalk, где находятся все библиотеки DLL и т. д. В этом решении вы говорите, что мне нужно будет только скопировать Microsoft.Biztalk.Pipeline. dll на сервер или упаковать его в свое приложение, и я смогу запустить свое приложение где угодно, используя описанный выше метод? - person Gareth Doherty; 21.08.2020

Извлечение сообщений из приостановленных экземпляров

Сценарий:

BizTalk 2010 и SQL 2008 R2 — это среда, которую мы использовали в этом сценарии.

У вас есть проблемы с некоторыми интеграциями, 1500 приостановленных экземпляров внутри BizTalk, и вам нужно отправить фактические сообщения клиенту, а затем вы не хотите вручную сохранять это из администратора BizTalk.

Существует множество блогов и интернет-ресурсов, указывающих, как это сделать с помощью vbs, powershell scripts, но я использовал BizTalk Terminator для решения подобных сценариев.

Как и сейчас, терминатор BizTalk задает вам 3 вопроса при запуске инструмента.

I.1.Все базы данных BizTalk зарезервированы? II.2.Все экземпляры хоста остановлены? III.3.Все агенты BizTalk SQL остановлены? Это нормально, когда вы действительно собираетесь что-то изменить в базах данных BizTalk, но это не то, что вы собираетесь делать в этом сценарии, вы используете инструмент только для чтения из баз данных BizTalk. Но у вас всегда должны быть резервные копии баз данных BizTalk.

Вы всегда несете ответственность за то, что делаете, но когда мы использовали эти инструменты так, как я описываю, у нас не было никаких проблем с этим сценарием.

Итак, после того, как вы запустите инструмент Terminator, нажмите «Да» на 3 вопроса (вам не нужно ничего останавливать в этом сценарии), затем подключитесь к правильной среде, сначала сделайте это в своей тестовой среде, чтобы вы чувствовали себя комфортно в этом сценарии, следующий шаг заключается в том, чтобы выбрать задачу терминатора, выбрать количество экземпляров (и сохранить сообщения), после этого вы должны заполнить параметр TAB правильным классом обслуживания и именем хоста и установить для SaveMessages значение True, а в последний раз установить FilesaveFullPath в правильную папку, в которую вы хотите сохранить сообщения.

Затем вы можете нажать кнопку «Выполнить» и, в зависимости от размера и того, сколько времени это может занять некоторое время, после этого отключения Terminator НЕ делайте ничего другого.

Теперь, если вы заполнили правильные значения в параметре TAB, вы должны иметь сохраненные сообщения в папке FilesaveFullPath.

Загрузите терминатор BizTalk по этому адресу:

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

person Peter Winther    schedule 05.06.2012

Скорее всего, это не поддерживается Microsoft. Не рискуйте испортить свою систему. Если вам нужно отредактировать и повторно отправить, это должно быть встроено в оркестровку. В противном случае лучше всего использовать WMI для написания сценария для:

  1. вытащить все приостановленные сообщения
  2. прекратить их
  3. редактировать их
  4. отправить их повторно
person Christian Loris    schedule 29.03.2010
comment
Так почему отрицательный балл? Мне было бы любопытно услышать, что вы думаете. - person Christian Loris; 30.03.2010
comment
Я думаю, когда он ответил, что его первая строка была адресована вам, я не напортачил с моей системой, когда я просто хочу их прочитать... - person Nix; 30.03.2010
comment
+1 для @ChrisLoris. Совет использовать WMI и прекращать приостановленные сообщения является разумным. Другая часть совета, возможно, сформулирована более формально, поскольку Microsoft не поддерживает прямой доступ к базе данных BizTalk. В будущих версиях BizTalk может измениться схема и т. д. Имея это в виду, примите во внимание, что данное решение может потребовать изменения, если установлена ​​новая производственная версия или даже исправление. - person Jennifer Zouak; 31.03.2010
comment
Спасибо за ответ. Я знаю, я ненавижу официальное ограничение «Не поддерживается MS». Под капотом BizTalk можно многое сделать, но я уже несколько раз был укушен, когда получал поддержку от MS. Они не превращаются в рывки или что-то в этом роде, но каждый раз, когда они натыкаются на препятствие... «неподдерживаемое» действие всегда отбрасывается как возможная причина. Просто следите за этим. Я также пропустил комментарий только для чтения в своем ответе. Он просто хочет сделать массовое извлечение. Критика принята. - person Christian Loris; 02.04.2010

вы можете найти его с помощью инструмента HAT, вам просто нужно указать схему, порт и точную дату с точным временем, и он покажет вам сообщения, щелкните правой кнопкой мыши нужный и сохраните.

person Fahad    schedule 08.06.2010