我正面临一个我无法识别的非常讨厌的问题。
我正在运行一个包含数千个对象的非常大的业务 ASP.Net 应用程序;它通过 MemoryStream 使用内存中的序列化/反序列化来克隆应用程序的状态(保险合同)并将其传递给其他模块。多年来它工作得很好。现在有时,不是系统地,在序列化中它会抛出异常
十进制字节数组构造函数需要一个长度为 4 的数组,其中包含有效的十进制字节。
使用相同的数据运行相同的应用程序,5 次中有 3 次有效。我启用了所有 CLR 异常,Debug - Exceptions - CLR Exception - Enabled,所以我猜如果发生错误的初始化/分配到十进制字段,程序应该停止。它不会发生。
我试图在更基本的对象中拆分序列化,但很难尝试识别导致问题的字段。从生产中的工作版本和这个我从 .Net 3.5 传递到 .NET 4.0 的版本,对 UI 部分而不是业务部分进行了一致的更改。我会耐心地经历所有的变化。
在不应该写入的地方看起来像是老式的 C 问题char *p
,并且只有在序列化过程中检查所有数据时才会出现问题。
在 .Net 的托管环境中是否可能发生这样的事情?该应用程序很大,但我看不到异常的内存增长。有什么方法可以调试和追踪问题?
以下是堆栈跟踪的一部分
[ArgumentException: Decimal byte array constructor requires an array of length four containing valid decimal bytes.]
System.Decimal.OnSerializing(StreamingContext ctx) +260
[SerializationException: Value was either too large or too small for a Decimal.]
System.Decimal.OnSerializing(StreamingContext ctx) +6108865
System.Runtime.Serialization.SerializationEvents.InvokeOnSerializing(Object obj, StreamingContext context) +341
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) +448
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +969
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +1016
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +319
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) +17
Allianz.Framework.Helpers.BinaryUtilities.SerializeCompressObject(Object obj) in D:\SVN\SUV\branches\SUVKendo\DotNet\Framework\Allianz.Framework.Helpers\BinaryUtilities.cs:98
Allianz.Framework.Session.State.BusinessLayer.BLState.SaveNewState(State state) in
对于长篇大论和未确定的问题,我将非常感谢任何帮助。