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.
Wygląda na jakiś problem buforowania, gdzie bufor jest retransmitowany, lub gdy bufor nie jest kasowana po transmisji/odbioru. –
Nie jestem świadomy żadnych istniejących problemów w tym zakresie. Ale dobrze byłoby zrozumieć, czy możesz opublikować fragment kodu repro. – Praburaj
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