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

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

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

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

У кого-либо есть какая-либо идея, где это может быть сделано?

6
задан SteveC 23 July 2014 в 08:50
поделиться

3 ответа

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

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

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

Приветствую

1
ответ дан 17 December 2019 в 20:30
поделиться

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

  1. извлекать все приостановленные сообщения
  2. завершать их
  3. редактировать их
  4. повторно отправлять их
0
ответ дан 17 December 2019 в 20:30
поделиться

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

0
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: