为什么我的C#web请求没有返回任何内容?

时间:2016-11-29 01:24:52

标签: c# json ssis

我正在点击一个返回长JSON集的URL(真的很长,2000万个字符)。只需将网址粘贴到Chrome中,返回完整的结果集大约需要3分钟。无论Chrome中的默认设置是什么,它都会提示我多次杀死页面或等待。但该页面将在几分钟后返回。

我是通过脚本任务从SSIS运行的。我对C#不太熟悉。我从示例中复制/粘贴了这段代码:

{

    HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(wUrl);
    httpWReq.Method = "GET";
    httpWReq.ContentType = "application/json";
    httpWReq.Timeout = 300000;
    HttpWebResponse httpWResp = (HttpWebResponse)httpWReq.GetResponse();
    RootObject jsonResponse = null;

    try
    {
        //Get the stream of JSON
        Stream responseStream = httpWResp.GetResponseStream();

        //Deserialize the JSON stream
        using (StreamReader reader = new StreamReader(responseStream))
        {
            //Deserialize our JSON
            DataContractJsonSerializer sr = new DataContractJsonSerializer(typeof(RootObject));
            jsonResponse = (RootObject)sr.ReadObject(responseStream);
        }
    }
    //Output JSON parsing error
    catch (Exception e)
    {
        FailComponent(e.ToString());
    }
    return jsonResponse;

我110%肯定wURL字符串是有效的JSON端点。当我单步执行代码时,它在此行上等待可能需要15秒:

HttpWebResponse httpWResp = (HttpWebResponse)httpWReq.GetResponse();

...然后返回没有错误...但它没有填充我期望的httpWResp(ContentLength = -1)。当它到达:

jsonResponse = (RootObject)sr.ReadObject(responseStream); 

... jsonResponse保存我预先定义的json容器对象,设置为null。我的URL返回了数千个json数组。

我没有在responseStream中看到任何有趣的属性,表明它实际上包含任何内容?

我在这里缺少什么?

我无法发布实际网址,因为它是私人公司网址。

=================================

编辑:我尝试了一个字符串更短的URL,然后返回。所以它似乎与长度有关。我通过验证器运行了返回值并且它成功了...所以可能是一个特殊字符,但我可能认为这个长度。

1 个答案:

答案 0 :(得分:1)

从评论中我们现在知道,您从GetResponse()返回的响应对象的{{1>} 确定StatusCode应用程序/ json; charset = UTF-8 - 表示服务器已返回数据' chunked'这就是ContentType = -1。

的原因

您应该可以在ContentLength上使用ReadToEnd()方法,如下所示:

StreamReader