c# - 为什么单声道有时会截断 http 下载?

标签 c# mono

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

var request = WebRequest.Create(url);
using (var response = request.GetResponse())
{
    string charset = null;
    var httpResponse = response as HttpWebResponse;
    if (httpResponse != null)
    {
        if (httpResponse.StatusCode != HttpStatusCode.OK)
        {
            throw new System.Net.WebException("Ststus code was: " + httpResponse.StatusCode);
        }
        charset = httpResponse.CharacterSet;
     }
     Encoding enc = charset != null ? Encoding.GetEncoding(charset) : null;
     using (var reader = new StreamReader(response.GetResponseStream(), enc, true))
     {
         return reader.ReadToEnd();
     }
}

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

为什么单声道会有这种行为,我该如何避免这个问题?

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

Edit2:这是我如何使用结果:

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

最佳答案

当我让程序在网络连接良好的服务器上运行时,问题发生的频率要低得多。 (下载几千次之后,而不是几百次之后)。这足以满足我的目的。

检查内容长度没有多大帮助,因为它经常是 -1。令人遗憾的是,网络内容在单声道中的实现如此糟糕。 (在 .net 上,即使连接不好,相同的代码也能完美运行。)

关于c# - 为什么单声道有时会截断 http 下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27931205/

相关文章:

c# - 按相似日期分组列表

c# - asp.net 中的链接按钮单击事件未触发

c# - SQLCLR:如何将程序集 Npgsql.dll 添加到数据库?

Linux 和 Mac 中的 C#

c# - 如何在 Mono 上安装 RESTful WCF Web 服务 (.svc)?

.net - 从第 3 方源恢复 NuGet 包

c# - 从所有程序集中在 CaSTLe Windsor 容器中以编程方式注册所有 Controller

c# - ASP.NET Core EF 添加迁移命令不起作用

c# - Java 和 C# 中的一等对象是什么?

asp.net - 如何将自定义文件扩展名映射到单声道?