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

标签 c# .net silverlight servicestack stack-overflow

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

相关文章:

c# - 控制台应用程序中的消息泵

c# - .NET 中插件系统的动态对象实例化

c# - 检测unity中引用的其他对象值的变化?

.net - 从 vb.net 中的 List(Of t) 中删除项目失败

.net - 如何知道VS C#项目的项目类型?

silverlight - 应用启动时获取当前主题 - Windows Phone 7

c# - 如何监听两个具有不同 MaxConcurrentCalls 的 ServiceBus 队列?

c# - Silverlight 视频的缩略图

c# - 可以处理WP7.1 中的所有MouseMove 事件吗?

c# - Selenium 与 UWP 应用程序?