我正在使用 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/