Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceStack在接收大数据时抛出StackOverflowException_C#_.net_Silverlight_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Stack Overflow - Fatal编程技术网 servicestack,stack-overflow,C#,.net,Silverlight,servicestack,Stack Overflow" /> servicestack,stack-overflow,C#,.net,Silverlight,servicestack,Stack Overflow" />

C# ServiceStack在接收大数据时抛出StackOverflowException

C# ServiceStack在接收大数据时抛出StackOverflowException,c#,.net,silverlight,servicestack,stack-overflow,C#,.net,Silverlight,servicestack,Stack Overflow,我使用ServiceStack的JsonServiceClient和Silverlight 5从我的ASP.Net服务器接收JSON数据。它适用于短JSON字符串,但当涉及到大量数据时,会在ServiceStack.ServiceClient.Web.asynchserviceclient.ReadCallBack中抛出StackOverflowException 因此,我检查了上的最新源代码,注意到数据是作为数据块从流中逐块读取的。问题是这个方法读取一个块,并告诉流在完成时递归地调用自己。我们

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

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

想法:

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

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

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

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

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

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


希望mythz很快就能看到它。我也有过几次这样的问题。如果您找到了解决方案,请告诉我们。Yikes。处理无界流的递归调用?:(我刚刚将默认缓冲区大小增加了一倍并使其可配置。它目前支持多个异步模式,因此在没有递归的情况下很容易出错,我们将在升级到.NET 4.0并删除APM回调后对其进行研究。出于好奇,抛出StackOverflowExceptions的响应有多大?谢谢。我会的。)尝试新的提交。17.5397 MB的响应会引发异常,而11.9957 MB的响应不会引发异常。不幸的是,我现在无法更准确地理解它。新版本与我们的响应大小兼容。再次感谢。