2012-11-07 37 views
6

我在Windows Server 2008 R2上运行ASP.Net应用程序。我已经安装了.NET Framework 4.5。从.NET Framework v2.0迁移到v4.0后,我开始体验WCF的随机行为。WCF随机返回无效的JSON

我的web服务返回JSON。重新启动IIS后,服务将返回完全有效的JSON大约3到5次。之后,JSON变得无效。我已经检查了通过Fiddler传递的信息以及我自己在客户端应用程序(调用服务的Adobe AIR应用程序)和服务器本身上的日志。

Fiddler显示原始响应确实包含无效的JSON。看起来非常多的是JSON中的一些随机点响应JSON开始再次写出!覆盖应该在那里并在过程中产生JSON的JSON。

看到这个级联的例子:

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

注意如何“responseCode”(这应该只出现在JSON响应的开头)突然在JSON再次出现进一步上。 "cdn{"responseCode":0当然是无效的JSON。

我已经尝试了很多补丁。我试过在不同的框架和不同的组合下运行ServiceModelReg.exeaspnet_regiis.exe。同样的行为。如果我恢复到v2.0之前的代码并将App Pool切换回v2.0,那么一切正常。

我相信这是WCF深处的一个bug。有任何想法吗?

我现在唯一的办法是将WCF转换并转换到ServiceStack之类的位置,如果需要的话可以调试到所有代码。

+1

看起来像是某种缓冲的问题,其中一个缓冲区重发,或在一个缓冲区不发送/接收后清零。 –

+4

我不知道任何现有的问题。但是,了解您是否可以发布一段repro代码会很有帮助。 – Praburaj

+0

你有没有试过FailedRequestLogging来查看是否有任何可疑的事情要经过这个过程?您是否尝试过通过JavaScriptSerializer()运行您的返回对象以查看它是否存在故障?如果需要,可以调试到框架中(请参阅:http://msdn.microsoft.com/zh-cn/library/cc667410.aspx)。 – Pete

回答

1

有完全相同的问题。

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

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

以上的一些解决方案和评论可能已经奏效。我不知道。我的最终解决方案是放弃WCF并使用服务堆栈。到目前为止,我发现它是用于实现Web服务的卓越体系结构。 –

0

你设置InstanceContextMode到单/ PerSession:我从我的web.config删除这些条目2固定呢?

请参阅此... Mix up two responses