Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将可序列化对象返回biztalk时数据丢失_C#_.net_Serialization_Biztalk_Biztalk 2010 - Fatal编程技术网

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

C# 将可序列化对象返回biztalk时数据丢失,c#,.net,serialization,biztalk,biztalk-2010,C#,.net,Serialization,Biztalk,Biztalk 2010,我的项目有一个编排,它包含一个非事务范围 在该范围内,有一个对.NET helper的调用,以获取一个带有值的哈希表 必须指出的是,这是我在该范围内执行的唯一的事情,这意味着该范围只包含调用.NET函数的表达式形状 返回哈希表的函数被标记为静态 看起来是这样的: public static Hashtable GetKeys(XmlDocument xmlDoc) { Hashtable servicesKey = new Hashtable();

我的项目有一个编排,它包含一个非事务范围

在该范围内,有一个对.NET helper的调用,以获取一个带有值的
哈希表

必须指出的是,这是我在该范围内执行的唯一的事情,这意味着该范围只包含调用.NET函数的表达式形状

返回
哈希表
的函数被标记为
静态

看起来是这样的:

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;
        }
由于某种原因,当发送大量消息并同时重新启动主机实例时-我在部分消息上得到一个空的
哈希表


是否有人可以帮助我更改它,以便在这种情况下消息不会丢失?

您需要正确序列化类,以确保数据正确保存

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

[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);

希望这有帮助。

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

关于返回空的hashtags,请尝试在控制台应用程序中单独测试该代码,并查看它在“大量消息”中的行为。
另一个建议是,将您的流程设计为每个消息(在mass中)都创建新的Orch实例,因此也将单独实例化.NET类。

我不是专家,但我认为这里的问题可能是持久性。我怀疑当实例在GetKeys方法中时可能会发生数据丢失。您可以在.Net helper调用之前通过调用一个空Orch来强制一个持久性点吗?有关持久性点,请参见此处: