我编写了一个简单的C#函数,通过以下API调用从MtGox检索交易历史记录:
https://data.mtgox.com/api/1/BTCUSD/trades?since=<trade_id>
此处记录:https://en.bitcoin.it/wiki/MtGox/API/HTTP/v1#Multi_currency_trades
这是功能:
string GetTradesOnline(Int64 tid)
{
Thread.Sleep(30000);
// communicate
string url = "https://data.mtgox.com/api/1/BTCUSD/trades?since=" + tid.ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string json = reader.ReadToEnd();
reader.Close();
reader.Dispose();
response.Close();
return json;
}
我从tid = 0(商品ID)开始获取数据(从一开始)。对于每个请求,我都会收到包含1000个交易详细信息的回复。我总是从上一个响应中为下一个请求发送交易ID。恰好适合4个请求和响应。但是之后,下面的行将引发“System.Net.WebException”,并指出“操作已超时”:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
这是事实:
关于什么可能是错的任何想法?
最佳答案
我有同样的问题。
对我来说,解决方法很简单,就像将HttpWebResponse代码包装在using块中一样。
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
// Do your processings here....
}
详细信息:当向同一主机发出多个请求,并且
WebResponse
没有正确处理时,通常会发生此问题。在那里using
块将正确地正确放置WebResponse
对象,从而解决了问题。