Циркулярная ссылка в веб-сервисе - PullRequest
5 голосов
/ 17 октября 2011

Я пытаюсь разрешить циклическую ссылку в веб-сервисе.Решение прекрасно работает, и некоторые операции могут быть вызваны, но та, которая использует ссылочный тип, дает исключение циклической ссылки (ниже).

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()

Архитектура выглядит примерно так:

Core layer <------ Data Layer <----- Logic Layer <---------- Web service
                     \/--------------------\/ <-------------------|
                                            \/--------------------|

Каждый слой представляет собой отдельную сборку, а веб-сервис ссылается на все три сборки.Я подключил отладчик, но он не сломался.Похоже, что внутренняя часть выходит из строя, но я понятия не имею, где, как все строит.Как мне отладить это?

1 Ответ

4 голосов
/ 17 октября 2011

Ваша круговая ссылка не в файлах проекта, а в объектах, которые вы пытаетесь отправить через веб-сервис. У одного из вас есть ссылка на самого себя или на объект, который ссылается на объект.

В сообщении об ошибке вам будет предложено посмотреть ваш тип: MyCoreAssembly.MyType

...