ServiceStack 在接收大型数据时抛出 StackOverflowException

本文关键字:StackOverflowException 数据 大型 ServiceStack | 更新日期: 2023-09-27 18:30:52

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

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

想法:

  • 将方法重构为迭代而不是递归。对于所有这些有条件的回报、等待、尝试捕获等,似乎是一项艰巨的任务。
  • 增加块大小。不知道4096有没有原因在这里,所以我宁愿不一个人做这件事。

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

ServiceStack 在接收大型数据时抛出 StackOverflowException

对于

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

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

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

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

相关文章:
  • 没有找到相关文章