我面临一个非常讨厌的问题,我无法识别.
我正在运行一个包含数千个对象的非常大的业务ASP.Net应用程序; 它使用内存中的序列化/反序列化与MemoryStream来克隆应用程序的状态(保险合同)并将其传递给其他模块.它运作良好多年.现在有时,不是系统地,在序列化中它抛出异常
十进制字节数组构造函数需要一个包含有效十进制字节的长度为4的数组.
使用相同的数据运行相同的应用程序,5次中的3次有效.我启用了所有CLR异常,Debug - Exceptions - CLR Exception - Enabled,所以我猜如果错误的初始化/分配到十进制字段,程序应该停止.它不会发生.
我试图在更基本的对象中拆分序列化,但是尝试识别导致问题的字段非常困难.从生产中的工作版本开始,我从.Net 3.5传递到.NET 4.0,并且已经对UI部分进行了一致的更改,而不是业务部分.耐心地,我会经历所有的变化.
它看起来像老式的C问题,当char *p它写不应该的时候,并且只有在序列化过程中它检查问题弹出的所有数据时.
在.Net的托管环境中是否可以这样?应用程序是巨大的,但我看不到异常的内存增长.什么是调试和追踪问题的方法?
下面是stacktrace的一部分
[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, …Run Code Online (Sandbox Code Playgroud)