2012-11-07 14 views
6

Używam aplikacji ASP.Net w systemie Windows Server 2008 R2. Mam zainstalowany system .NET Framework 4.5. Po migracji z .NET Framework v2.0 do wersji 4.0 zacząłem doświadczać losowego zachowania z WCF.Nieprawidłowy JSON jest losowo zwracany przez WCF

Mój serwis internetowy zwraca JSON. Po ponownym uruchomieniu usług IIS usługa zwróci doskonale prawidłowy JSON około 3 do 5 razy. Po tym JSON staje się nieważny. Sprawdziłem, co dzieje się z siecią przez Fiddlera, a także moje logi dotyczące zarówno aplikacji klienckiej (aplikacja Adobe AIR, która wywołuje tę usługę), jak i samego serwera.

Fiddler pokazuje, że nieprzetworzona odpowiedź rzeczywiście zawiera nieprawidłowy JSON. Wydaje się bardzo, że jakiś losowy punkt w JSON JSON odpowiedzi zaczyna być wypisywany ponownie !, nadpisując to, co powinno tam być i wytwarzając w ten sposób oszpecony JSON.

Zobacz ten łączone przykład:

{"responseCode":0,"actionCode":"OK","cdn{"responseCode":0, "actionCode"..... 

zauważyć, jak „Kod odpowiedzi” (który powinien pojawić się tylko na początku odpowiedzi JSON) nagle pojawia się ponownie w JSON dalej. "cdn{"responseCode":0 jest oczywiście nieprawidłowy JSON.

Próbowałem wielu łatek. Próbowałem już działa ServiceModelReg.exe i aspnet_regiis.exe spod różnych ram i w różnych kombinacjach. To samo zachowanie. Jeśli powrócę do poprzedniego kodu w wersji 2.0 i zmieniłem pulę aplikacji z powrotem na v2.0, wszystko działa poprawnie.

Uważam, że jest to błąd w WCF. Jakieś pomysły?

Jedyne wyjście, jakie mam w tym momencie, to wyrwanie WCF i przejście na coś takiego jak ServiceStack, gdzie w razie potrzeby mogę debugować cały kod.

+1

Wygląda na jakiś problem buforowania, gdzie bufor jest retransmitowany, lub gdy bufor nie jest kasowana po transmisji/odbioru. –

+4

Nie jestem świadomy żadnych istniejących problemów w tym zakresie. Ale dobrze byłoby zrozumieć, czy możesz opublikować fragment kodu repro. – Praburaj

+0

Czy próbowałeś FailedRequestLogging, aby sprawdzić, czy coś jest podejrzane przez proces? Czy próbowałeś uruchomić swoje obiekty zwracające za pośrednictwem JavaScriptSerializer(), aby sprawdzić, czy jest w nim usterka? Jeśli chcesz, możesz debugować do frameworka (zobacz: http://msdn.microsoft.com/en-us/library/cc667410.aspx). – Pete

Odpowiedz

1

Miał dokładnie ten sam problem. Naprawiłem to, usuwając te 2 pozycje od mojego web.config:

<system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" logMessagesAtTransportLevel="true" maxSizeOfMessageToLog="-1" maxMessagesToLog="-1" /> 
    </diagnostics> 
</system.serviceModel> 

i

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging"> 
      <listeners> 
       <add name="messages" type="MyCustomListener" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 
+0

Niektóre z powyższych rozwiązań i komentarzy mogły zadziałać. Nie wiem Moim ostatecznym rozwiązaniem było porzucenie WCF i użycie Service Packa. Jak na razie stwierdzam, że jest to doskonała architektura do wdrażania usług internetowych. –

Powiązane problemy