Tôi đang cố giải quyết tham chiếu vòng tròn trong dịch vụ web. Các giải pháp xây dựng tốt và một số hoạt động được gọi, nhưng một trong đó sử dụng một loại tham chiếu cho một ngoại lệ tham chiếu vòng tròn (dưới đây).Tham khảo thông tư trong dịch vụ web
System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: A circular reference was detected while serializing an object of type MyCoreAssembly.MyType <-------- this is the referenced type
at System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(String name, String ns, Object o, Boolean writePrefixed, XmlSerializerNamespaces xmlns)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write21_VRD(String n, String ns, VRD o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write21_VRD(String n, String ns, VRD o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write31_Hereditament(String n, String ns, Hereditament o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write32_HereditamentVrd(String n, String ns, HereditamentVrd o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write33_VRDResponse(String n, String ns, VRDResponse o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write43_VRDResponse(Object o)
at Microsoft.Xml.Serialization.GeneratedAssembly.VRDResponseSerializer.Serialize(Object objectToSerialize, XmlSerializationWriter writer) <------- this is my type
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
Kiến trúc trông gần như thế này:
Core layer <------ Data Layer <----- Logic Layer <---------- Web service
\/--------------------\/ <-------------------|
\/--------------------|
Mỗi lớp là một tài liệu tham khảo dịch vụ web lắp ráp riêng và cả ba cụm. Tôi đã đính kèm một trình gỡ lỗi nhưng nó không bị hỏng. Có vẻ như các internals đang thất bại nhưng tôi không có ý tưởng nơi mà tất cả mọi thứ được xây dựng. Làm thế nào tôi sẽ đi về gỡ lỗi này?
bạn có tham chiếu đến lớp Core từ giao diện người dùng ở đâu, tôi đoán, bạn đang gọi các dịch vụ web? –
Tại sao không có dịch vụ web chỉ nói chuyện với lớp logic, và lớp logic chỉ nói chuyện với lớp dữ liệu. Điều này sẽ dẫn đến một số phương thức chỉ truyền dữ liệu từ lớp này sang lớp khác, nhưng có thể giải quyết vấn đề của bạn. –