Biztalk приостановил сообщения в базе данных - PullRequest
6 голосов
/ 29 марта 2010

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

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

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

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

Ответы [ 4 ]

1 голос
/ 06 июня 2012

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

Сценарий:

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 30 марта 2010

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

Как я это сделал, используя метод "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», в зависимости от того, что вы хотите, вы также можете отфильтровать определенные сообщения с помощью регулярного выражения и т. Д.

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

Привет

0 голосов
/ 08 июня 2010

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

0 голосов
/ 29 марта 2010

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

  1. вытащить все приостановленные сообщения
  2. прекратить их
  3. редактировать их
  4. повторно отправить их
...