我正在使用ServiceStack的JsonServiceClient和Silverlight 5从我的ASP.Net服务器接收JSON数据。它适用于简短的JSON字符串,但是当涉及到非常大量的数据时,ServiceStack.ServiceClient.Web.AsyncServiceClient.ReadCallBack<>
中会抛出StackOverflowException。
所以我检查了GitHub上的最新源代码,并注意到数据是作为块4096 bytes从流中逐块读取的。问题是这个方法读取一个块并告诉流完成后递归调用自身。我们收到的数据越多,发生的递归调用就越多。这就是当接收到的数据太大时应用程序崩溃的原因。
想法:
无论如何,在我下载所有源代码之前,我自己修改并编译它,我想听听你对此的看法。这是一个错误还是我使用它错了?
答案 0 :(得分:1)
对于JSON响应,通过线路发送的字符串长度存在限制。在外部应用程序上,您可能永远不会达到默认限制。但是,在内部应用程序上,您可能会点击它,因为重量不是这样且问题。您需要在web.config文件中添加以下内容以最大化JSON字符串长度。
请注意,您无法将字符串长度设置为无限制。另外,我认为你不能超过2147483644。
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483644"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
答案 1 :(得分:0)
您始终可以创建新线程并将堆栈大小传递给它的构造函数 这总是有效的 请注意,在某些情况下,例如ASP.NET开发,默认情况下堆栈跟踪大小非常小。 祝你好运