2012-11-07 3 views
6

Ich verwende eine ASP.Net-App unter Windows Server 2008 R2. Ich habe bis zu .NET Framework 4.5 installiert. Bei der Migration von .NET Framework 2.0 auf Version 4.0 habe ich zufälliges Verhalten von WCF erfahren.Ungültiger JSON, der zufällig von WCF zurückgegeben wird

Mein Webdienst gibt JSON zurück. Nach dem Neustart von IIS wird der Dienst JSON ca. 3 bis 5 Mal fehlerfrei ausgeben. Danach wird der JSON ungültig. Ich habe überprüft, was über die Leitung über Fiddler kommt und auch meine eigenen Logs sowohl auf Client-App (eine Adobe AIR-App, die den Dienst aufruft) und auf dem Server selbst.

Fiddler zeigt, dass die rohe Antwort tatsächlich ungültige JSON enthält. Es scheint sehr, dass ein zufälliger Punkt in der JSON die Antwort JSON beginnt, wieder ausgeschrieben zu werden !, überschreiben, was da sein sollte und produzierten JSON in diesem Prozess.

dieses verketteten Beispiel Siehe:

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

Hinweis wie „Response“ (die erst am Anfang der JSON-Antwort erscheinen sollen) in der JSON erscheint plötzlich wieder weiter. "cdn{"responseCode":0 ist natürlich ungültig JSON.

Ich habe zahlreiche Patches ausprobiert. Ich habe versucht, ServiceModelReg.exe und aspnet_regiis.exe von unter verschiedenen Frameworks und in verschiedenen Kombinationen ausgeführt. Gleiches Verhalten. Wenn ich unter v2.0 zum vorherigen Code zurückwechsle und den App Pool wieder auf v2.0 umschalte, funktioniert alles einwandfrei.

Ich glaube, dass dies ein Fehler in der WCF ist. Irgendwelche Ideen?

Die einzige Möglichkeit, die ich an dieser Stelle habe, besteht darin, WCF zu entfernen und zu etwas wie ServiceStack zu wechseln, wo ich bei Bedarf den gesamten Code debuggen kann.

+1

sieht aus wie eine Art von Puffer Problem, wo ein Puffer erneut übertragen wird, oder wo ein Puffer nicht nach der Sende-/Empfangs gelöscht wird. –

+4

Mir sind keine bestehenden Probleme bekannt. Aber es wäre hilfreich zu verstehen, ob Sie einen Reprocode schreiben können. – Praburaj

+0

Haben Sie FailedRequestLogging versucht, um zu sehen, ob es etwas Fischiges durch den Prozess geht? Haben Sie versucht, Ihre Rückgabeobjekte über JavaScriptSerializer() auszuführen, um festzustellen, ob ein Fehler darin enthalten ist? Sie können bei Bedarf in das Framework debuggen (siehe: http://msdn.microsoft.com/en-us/library/cc667410.aspx). – Pete

Antwort

1

Hatte das exakt gleiche Problem. Ich reparierte diese durch diese 2 Einträge aus meinem web.config entfernen:

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

und

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

Einige der obigen Lösungen und Kommentare haben vielleicht funktioniert. Ich weiß es nicht. Meine letzte Lösung war WCF zu verlassen und Service Stack zu verwenden. Bisher stelle ich fest, dass es eine überlegene Architektur für die Implementierung von Webdiensten ist. –