我正在将ServiceStack的JsonServiceClient与Silverlight 5一起使用,以从ASP.Net服务器接收JSON数据。它非常适合短JSON字符串,但是当涉及大量数据时,在ServiceStack.ServiceClient.Web.AsyncServiceClient.ReadCallBack<>中引发StackOverflowException。

因此,我检查了有关GitHub的最新源代码,并注意到从数据流中以4096 bytes块的形式逐块读取数据。问题在于此方法读取一个块,并告诉流在完成后以递归方式调用自身。我们收到的数据越多,发生的递归调用就越多。这就是为什么接收到的数据太大时应用程序崩溃的原因。

想法:

  • 将方法重构为迭代的而不是递归的。处理所有这些条件返回,等待,try-catch等似乎是一项艰巨的任务。
  • 增加块大小。我不知道4096是否有任何原因
    在这里,所以我宁愿不要一个人做。

  • 无论如何,在我下载所有源代码,自己进行修改和编译之前,我想听听您对此的看法。这是一个错误还是我使用错了?

    最佳答案

    对于您的JSON响应,通过网络发送的字符串长度有一个限制。在外部应用程序上,您可能永远都不会达到默认限制。但是,在内部应用程序上您可能会碰到它,因为重量不是问题,这是问题所在。您需要在web.config文件中添加以下内容,以最大程度地增加JSON字符串的长度。

    请注意,您不能将字符串长度设置为无限制。另外,我认为您无法超越2147483644。

    <configuration>
     <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="2147483644"/>
           </webServices>
       </scripting>
     </system.web.extensions>
    </configuration>
    

    关于c# - 接收大数据时,ServiceStack引发StackOverflowException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18720651/

    10-11 01:28
    查看更多