gpt4 book ai didi

c# - ServiceStack接收大数据时抛出StackOverflowException

转载 作者:太空狗 更新时间:2023-10-29 17:59:24 26 4
gpt4 key购买 nike

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

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

想法:

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

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

最佳答案

为您的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com