长时间运行,但有限长度HttpWebRequest Callout只获取部分数据

时间:2014-04-28 16:43:41

标签: c# http httpwebrequest webrequest httpwebresponse

我正在尝试使用第三方服务API。他们带来的所有记录中的一种方法需要花费大量时间,大约9分钟(我使用chrome app" Advanced Rest Client")。

我试过设置webRequest.Timeout = 3600000;// Timeout.Infinite; 但它总是在2分钟后回来,结果包含135条记录(而Chrome应用程序返回1050条记​​录,这是正确的#)

我在两种情况下使用相同的参数(我将其作为POST数据发送);那么为什么结果有差异? 我在一个将在WPF应用程序中使用的类库中使用此代码。

  1. 超时是否有最大值?
  2. Timeout.Infinite将其设置为' -1' ,这是对的吗?
  3. 获取所有数据的其他解决方法是什么?
  4. 非常感谢任何帮助/建议。

    更新:添加代码

     HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
           AllDevicesList devInfo = null;
           try
           {
               string postData = "";
    
               foreach (string key in postParameters.Keys)
               {
    
                   postData += HttpUtility.UrlEncode(key) + "="
                         + HttpUtility.UrlEncode(postParameters[key]) + "&";
               }
               postData = postData.TrimEnd('&');
               if (cookie == null)
                   webRequest.CookieContainer = new CookieContainer();
               else
                   webRequest.CookieContainer = cookie;
    
    
               webRequest.Timeout = 3600000;// Timeout.Infinite; // 1000000;
    
               webRequest.KeepAlive = true;
               webRequest.Method = "POST";
    
               byte[] data = Encoding.ASCII.GetBytes(postData);
    
               webRequest.ContentType = "application/x-www-form-urlencoded";
    
               webRequest.ContentLength = data.Length;
    
               Stream requestStream = webRequest.GetRequestStream();
               requestStream.Write(data, 0, data.Length);
    
               WebResponse WebResp = webRequest.GetResponse();
    
               DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(AllDevicesList));
    
    
               object objResponse = jsonSerializer.ReadObject(WebResp.GetResponseStream());
               devInfo = objResponse as AllDevicesList;
    
    
               requestStream.Close();
    
    
               WebResp.Close();
    

1 个答案:

答案 0 :(得分:0)

我已将实现更改为Asynchronous,现在我获得了所有记录。 感谢您的所有回复。