2012-11-07 9 views
6

Sto eseguendo un'applicazione ASP.Net su Windows Server 2008 R2. Ho installato .NET Framework 4.5. Dopo la migrazione da .NET Framework v2.0 alla v4.0 ho iniziato a sperimentare un comportamento casuale da WCF.JSON non valido restituito in modo casuale da WCF

Il mio servizio Web restituisce JSON. Al riavvio di IIS, il servizio restituirà JSON perfettamente valido circa da 3 a 5 volte. Dopodiché, il JSON non è più valido. Ho ispezionato ciò che sta arrivando attraverso Fiddler e anche i miei registri su entrambe le app client (un'app Adobe AIR che chiama il servizio) e sul server stesso.

Fiddler mostra che la risposta non elaborata contiene infatti JSON non valido. Appare molto che un certo punto casuale nel JSON la risposta JSON inizi a essere scritto di nuovo !, sovrascrivendo quello che dovrebbe essere lì e producendo un JSON manglinato nel processo.

Vedi questo esempio concatenati:

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

noti come "responseCode" (che dovrebbe apparire solo all'inizio della risposta JSON) appare improvvisamente di nuovo in JSON più avanti. "cdn{"responseCode":0 è ovviamente JSON non valido.

Ho provato numerose patch. Ho provato a eseguire ServiceModelReg.exe e aspnet_regiis.exe da diverse strutture e in diverse combinazioni. Stesso comportamento. Se ritorna al codice precedente sotto v2.0 e rimando il Pool di App alla v2.0, allora tutto funziona correttamente.

Credo che questo sia un bug in profondità nella WCF. Qualche idea?

L'unica risorsa che ho a questo punto è di estrarre WCF e passare a qualcosa come ServiceStack dove posso eseguire il debug di tutto il codice, se necessario.

+1

sembra una sorta di problema di buffer, in cui viene ritrasmesso un buffer, o dove un buffer non viene eliminato dopo la trasmissione/ricezione. –

+4

Non sono a conoscenza di problemi esistenti al riguardo. Ma sarebbe utile capire se è possibile pubblicare un pezzo di codice di riproduzione. – Praburaj

+0

Hai provato FailedRequestLogging per vedere se c'è qualcosa di strano durante il processo? Hai provato a eseguire gli oggetti di ritorno tramite JavaScriptSerializer() per vedere se c'è un problema tecnico? È possibile eseguire il debug nel framework, se necessario (consultare: http://msdn.microsoft.com/en-us/library/cc667410.aspx). – Pete

risposta

1

Aveva lo stesso identico problema. Ho fissato questo rimuovendo questi 2 voci dal mio web.config:

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

e

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

Alcune delle soluzioni e i commenti sopra potrebbero aver funzionato. Non lo so. La mia soluzione finale era abbandonare WCF e usare Service Stack. Finora sto trovando che è un'architettura superiore per l'implementazione dei servizi web. –

Problemi correlati