Tôi đang tìm kiếm thông tin chi tiết về cách thiết lập nền tảng thời gian chạy để hiển thị loại nguồn của lỗi Microsoft deserialization .Net nhị phân..Net Binary Deserialization Phát hiện lỗi/pháp y cho nền tảng thời gian chạy
Khi sử dụng BinaryFormatter.Deserialize(StreamingContextStates.CrossMachine)
và một trong các loại không tồn tại trong các tệp nhị phân hiện tại; thay vì ném một lỗi, .Net chèn đối tượng [TypeLoadExceptionHolder]
. Riêng đối với các bộ sưu tập, điều này không gây ra vấn đề gì ngay lập tức.
Sau đó, khi bộ sưu tập được sắp xếp để truyền giữa các tầng ứng dụng; nền tảng nhận được một 'thất bại tuần tự hóa' vì không thể tuần tự hóa [TypeLoadExceptionHolder]
. Vì vậy, lỗi kết quả là vô ích khi thực sự cung cấp các manh mối về loại nguồn gây ra sự cố. Bây giờ việc săn (thời gian hút) là để xem nhà phát triển (trong số hàng trăm) đã thêm một loại mới vào một nền tảng triệu dòng.
Sự cố này xảy ra với một số tần suất do luồng tuần tự hóa được sử dụng để hỗ trợ nền tảng sessioncache. Mã được triển khai khá thường xuyên và theo kiểu tăng dần. Các yêu cầu trang của khách hàng có thể bị trả lại giữa các phiên bản cũ và mới của codebase trong cửa sổ triển khai. Sự giới thiệu bất cẩn của một kiểu mới sẽ làm cho các yêu cầu trang trên phiên bản cũ bị thổi phồng.
Bất kỳ suy nghĩ nào về việc cung cấp lỗi/bẫy thời gian chạy phong phú sẽ được đánh giá cao.
(SerializationException)
Type 'System.Runtime.Serialization.TypeLoadExceptionHolder' in Assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
- at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
- at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
- at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
- at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
- at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
- at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
- at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
- at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)