2013-07-11 12 views
7

Mam problemy z serializowaniem obiektów do JSON, a będąc nowicjuszem w WCF, mam problemy z tym, od czego zacząć w zakresie debugowania. Wszystko, co dostaję, gdy trafię w usługę, wpisując adres URL w przeglądarce, strona nie jest dostępna.Debugowanie usługi WCF, która nie będzie serializować obiektów

Scenariusz: posiadam klasę A, która dziedziczy listę klas B. Jeśli skomentuję w klasie A, w której dodaje on swoją kolekcję, mogę przynajmniej trafić w usługę (oczywiście nie będzie żadnych danych), ale jeśli doda ją do swojej kolekcji, nie będę już mógł jej użyć.

interfejsu:

<OperationContract()> _ 
<WebGet(UriTemplate:="getAdverseReactions", responseFormat:=WebMessageFormat.Json)> _ 
<ServiceKnownType(GetType(AdverseReactions))> _ 
<ServiceKnownType(GetType(AdverseReaction))> _ 
Function GetAdverseReactions() As AdverseReactions 

interfejs wykonawcze:

Public Function GetAdverseReactions() As AdverseReactions Implements IPortalCoreService.GetAdverseReactions 
    Return CoreServiceController.GetAdverseReactions()//which returns class A 
End Function 

Klasa A:

<CollectionDataContract(Name:="AdverseReactionsCollection", ItemName:="AdverseReaction")> _ 
Public Class AdverseReactions 
Inherits List(Of AdverseReaction) 

Klasa B:

<DataContract(IsReference:=True)> _ 
Public Class AdverseReaction 

Przekroczyłem kod, dołączając proces, i nie są zgłaszane żadne wyjątki, a ja mogę potwierdzić, że obiekty są zwracane tak, jak powinny, po prostu nie mogę ich przekształcić do postaci szeregowej. Czytałem o odwołaniach cyklicznych, a mój przyjaciel sugerował, że te dwie klasy mogą serializować się nawzajem w nieskończony sposób.

Moje główne pytanie: czy jest miejsce, w którym mogę sprawdzić, dlaczego tak się dzieje, lub przynajmniej więcej informacji na jego temat? Ten problem mnie obchodzi, chcę tylko serializować to, a kiedy to zrobię, zrobię sobie tygodniowy urlop :).

+0

Czy to musi być usługa 'WCF', czy jest to, co wybrałeś, aby ją wdrożyć? –

+0

@KarlAnderson Tak, to prawda. Pracuję z istniejącą bazą kodu. –

Odpowiedz

11

Dodaj następujący blok do web.config <configuration> bloku

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\log\WebTrace.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

i zapewnienia określonego katalogu (c: \ log) istnieje i może być zapisywana przez usługę IIS.

Po wykonaniu tej czynności wykonaj czynność powodującą problem z serializacją, a następnie przejdź do katalogu i kliknij dwukrotnie wygenerowany plik svclog.

Spowoduje to otwarcie pliku w pliku Microsoft Service Trace Viewer. Po otwarciu zobaczysz błędy wyświetlone na czerwono po lewej stronie.

Kliknięcie jednego z nich spowoduje wyświetlenie szczegółów w prawym górnym okienku, a następnie kliknięcie każdej z akcji w celu ustalenia, na co składa się WCF.

+0

Niesamowite, dzięki! –

+0

to jest niesamowite.Ale czy istnieje sposób, aby zobaczyć jsona, który próbowaliśmy analizować? –

Powiązane problemy