我有以下代码......在第一次迭代中,它查询服务器就好了。但是如果得到一个错误,return action()
被调用,但Fiddler没有任何反应,并立即跳转到catch
块。发生了什么事?
for (int retry = 0; retry < retryCount; retry++)
{
try
{
return action();
}
catch (WebException ex)
{
// truncated for clarity
}
}
它被称为Retry.Do(() => HttpReturnJson(request), TimeSpan.FromSeconds(15), 3);
这就是我HttpReturnJson
的样子:
已编辑我尝试将WebResponse
和StreamReader
封闭在using
块内...它似乎不是旧 WebResponse response
正在处理中。在重试时,我还在读旧的。如何在重试时重新发送request
?
public string HttpReturnJson(HttpWebRequest request)
{
using (WebResponse response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string data = reader.ReadToEnd();
return data;
}
}
答案 0 :(得分:2)
您不能多次读取相同的响应,因此您需要在每次重试时重新发送请求,而不是从响应中读取。
以下是您HttpReturnJson
重新创建请求的方式(假设已知网址上的常规GET):
public string HttpReturnJson(string url)
{
using (var request = WebRequest.Create(url))
using (WebResponse response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string data = reader.ReadToEnd();
return data;
}
}
请注意,如果您需要标题/发布数据,则需要在每次请求时都设置这些数据。