Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# 为什么mono有时会截断http下载?_C#_Mono - Fatal编程技术网

C# 为什么mono有时会截断http下载?

C# 为什么mono有时会截断http下载?,c#,mono,C#,Mono,我使用以下代码下载文本(json): 在Windows(.net)上工作正常。在Linux(Mono运行时)上,它有时返回截断的数据:json解析器崩溃,因为找不到字符串的结束分隔符和类似错误。解析器没有问题:我尝试了两种不同的方法。这似乎与编码无关,因为对于完全相同的下载数据,它有时有效,有时无效 为什么mono会这样做?我如何避免这个问题 编辑:为了调试目的,我添加了一个控制台打印。直接来自上述代码的字符串被最终截断 编辑2:下面是我如何使用结果: string json = Downloa

我使用以下代码下载文本(json):

在Windows(.net)上工作正常。在Linux(Mono运行时)上,它有时返回截断的数据:json解析器崩溃,因为找不到字符串的结束分隔符和类似错误。解析器没有问题:我尝试了两种不同的方法。这似乎与编码无关,因为对于完全相同的下载数据,它有时有效,有时无效

为什么mono会这样做?我如何避免这个问题

编辑:为了调试目的,我添加了一个控制台打印。直接来自上述代码的字符串被最终截断

编辑2:下面是我如何使用结果:

string json = DownloadTextFile(url);
dynamic obj = Json.Decode(json);//Decoding fails here, because string is truncated.

当我让程序在与网络连接良好的服务器上运行时,问题就不那么频繁了。(下载几千次之后,而不是几百次之后)。这对我来说已经足够好了


检查内容长度没有多大帮助,因为它通常是-1。令人遗憾的是,mono中的网络功能实现得如此糟糕。(在.net上,即使在连接不好的情况下,同样的代码也能完美地工作。)

我对Linux不太了解,但我会从HTTP通信的网络跟踪开始,以验证所有数据是否都从服务器传输到客户端。这将排除Linux机器上的低级网络问题。内容长度是否错误?请尝试在act中捕获它:添加一个断言以确保StreamReader返回的任何内容都以“}”结尾,以便您知道进入解析器的是有效的JSON。我敢打赌这个平台是正确的,这个bug是你的…@christoph:1。linux和windows机器是同一台pc。如果出现网络问题,我希望框架方法抛出某种类型的ecxeption,而不是静默失败。如果StreamReader出现问题,如果它认为传输在实际结束之前就结束了,您可以尝试使用缓冲区和循环直接读取流吗?响应应该告诉您HTTP响应返回了多少有效负载字节。读取循环可以使用该数字等待所有数据到达,而不是依赖于流中是否还有剩余的字节。
string json = DownloadTextFile(url);
dynamic obj = Json.Decode(json);//Decoding fails here, because string is truncated.