将可序列化对象返回到 biztalk 时数据丢失

本文关键字:数据 biztalk 序列化 对象 返回 | 更新日期: 2023-09-27 18:31:36

我的项目有一个包含非事务范围的业务流程。

在该作用域内,有一个对 .NET 帮助程序的调用,以便获取包含值的Hashtable

值得一提的是,这是我在该范围内执行的唯一操作,这意味着该范围仅包含调用 .NET 函数的表达式形状。

返回Hashtable的函数标记为 static

它看起来像这样:

public static Hashtable GetKeys(XmlDocument xmlDoc)
        {
            Hashtable servicesKey = new Hashtable();
            //Key1
            int keysCounter = 1;
            // Add key1
            servicesKey.Add("Key" + keysCounter, Constants.Keys.First);
            keysCounter++;
            // Add key2
            servicesKey.Add("Key" + keysCounter, Constants.Keys.Second);
            keysCounter++;
            // Add key3
            servicesKey.Add("Key" + keysCounter, Constants.Keys.Third);
            keysCounter++;
            return servicesKey;
        }

出于某种原因,当发送大量消息并同时重新启动主机实例时 - 结果我在某些消息上得到一个空Hashtable

有人可以协助我如何更改它,以便在这种情况下消息不会丢失吗?

将可序列化对象返回到 biztalk 时数据丢失

您需要正确序列化类,以确保数据正确持久化。

首先,您需要为您的类提供可序列化的标记:

[Serializable]
public class MyClass
{
    public Hashtable GetKeys(XmlDocument xmlDoc)
    {
        // etc...
    }
}

然后,需要在业务流程中实例化它的实例。为此,可以创建一个变量,并为其分配类的类型(必须使用业务流程引用 biztalk 项目中包含该类的程序集)。

然后,可以在表达式形状中声明一个新实例:

// In an expression shape:
MyOrchestrationVariable = new MyExternalAssembly.MyClass();

并安全地调用您的方法:

// In an expression shape again:
ServicesKey = MyOrchestrationVariable.GetKeys(XmlDoc);

希望这有帮助。

我不

明白,这是什么意思,并重新启动主机实例。提交消息后是否重新启动主机实例?为什么会这样?

关于返回空主题标签,请尝试在控制台应用程序中单独测试该代码,看看它在"大量消息"中的行为。另一个建议是,设计流程的方式是,每条消息(在 mass 中)都会创建 Orch 的新实例,因此也会单独实例化 .NET 类。