将可序列化对象返回到 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
。
有人可以协助我如何更改它,以便在这种情况下消息不会丢失吗?
您需要正确序列化类,以确保数据正确持久化。
首先,您需要为您的类提供可序列化的标记:
[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 类。