Biztalk在数据库中暂停了消息

时间:2010-03-29 10:53:50

标签: database biztalk messagebox

我想知道是否有人知道我在哪里可以看到biztalk数据库中已暂停消息的数据。

我需要这个,因为大约有900条消息由于验证而被暂停,我需要编辑所有这些消息,因此无法恢复。

我知道暂停消息的信息显示在表BizTalkMsgBoxDb的{​​{1}}中,并且每条消息的不同部分都显示在表InstancesSuspended中。但是我找不到存储实际数据的表格。

有谁知道可以做到这一点?

4 个答案:

答案 0 :(得分:1)

我找到了一种方法来做到这一点,当我只是想读它时,我的系统没有搞砸了。

我是如何使用Microsoft.Biztalk.Pipeline.dll使用方法“CompressionStreams”。

执行此操作的方法:

    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 :(得分:1)

从已暂停的实例中提取邮件

情景:

BizTalk 2010和SQL 2008 R2是我们在此场景之前使用的环境。

某些集成存在问题,BizTalk中有1500个已暂停的实例,您需要将实际消息发送给客户,然后您正确地不想从BizTalk Administrator手动保存它。

有很多博客和互联网资源指出vbs,powershell脚本如何做到这一点,但我使用BizTalk Terminator来解决这种情况。

正如您现在的BizTalk终结者在工具启动时问你3个问题

I.1。是否备份了所有BizTalk数据库? II.2。所有主机实例都已停止? III.3。所有BizTalk SQL代理都已停止? 当您要在BizTalk数据库中实际更改某些内容时,这是可以的,但这不是您在此方案中要执行的操作,您只使用该工具从BizTalk数据库中读取。但是你应该总是从BizTalk数据库中备份。

你总是对你正在做的事情负责,但是当我按照我描述的方式使用这些工具时,我们对这种情况没有任何问题。

所以在你启动终结者工具之后,请点击三个问题的肯定(你不需要在这种情况下停止任何事情)然后连接到正确的环境,请先在你的测试环境中这样做,这样你就对这种情况感到满意,下一步是选择一个终结器任务选择Count Instances(并保存消息),之后你必须用正确的serviceClass和Hostname填充参数TAB,并将SaveMessages设置为True,最后将FilesaveFullPath设置为你要保存的正确文件夹消息到。

然后您可以选择单击执行按钮,根据大小和可能需要一些时间的数量,在此断开后终结器不执行任何其他操作。

如果您在参数TAB中填写了正确的值,那么现在应该在FilesaveFullPath文件夹中包含已保存的消息。

从此地址下载BizTalk终结器:

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

答案 2 :(得分:0)

微软很可能不支持这种做法。不要冒险搞砸你的系统。如果您需要进行编辑并重新提交,则需要将其构建到业务流程中。否则,最好的办法是使用WMI编写脚本:

  1. 取出所有已暂停的消息
  2. 终止他们
  3. 编辑他们
  4. 重新提交

答案 3 :(得分:0)

您可以通过HAT工具找到它,只需指定架构,端口和确切日期即可 确切的时间,它将显示消息右键单击所需的消息并保存。