9

我正在使用 ServiceStack 的 JsonServiceClient 和 Silverlight 5 从我的 ASP.Net 服务器接收 JSON 数据。它非常适用于短 JSON 字符串,但是当涉及到大量数据时,会抛出 StackOverflowException ServiceStack.ServiceClient.Web.AsyncServiceClient.ReadCallBack<>

因此,我检查了GitHub 上的最新源代码,发现数据是从流中以4096 字节块的形式逐块读取的。问题是这个方法读取一个块并告诉流在完成时递归地调用自己。我们收到的数据越多,递归调用就越多。这就是当接收到的数据太大时应用程序崩溃的原因。

想法:

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

无论如何,在我下载所有源代码,自己修改和编译之前,我想听听你对此的看法。是bug还是我用错了?

4

2 回答 2

1

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

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

<configuration> 
 <system.web.extensions>
   <scripting>
       <webServices>
           <jsonSerialization maxJsonLength="2147483644"/>
       </webServices>
   </scripting>
 </system.web.extensions>
</configuration> 
于 2013-12-20T18:27:24.070 回答
0

您始终可以创建一个新线程并将堆栈大小传递给它的构造函数。这将始终有效 请注意,在某些情况下,例如 ASP.NET 开发,默认情况下您的堆栈跟踪大小非常小。祝你好运

于 2013-09-10T21:25:48.783 回答