只是想知道,是否存在处理请求排队的框架类。
发送请求时,应将其添加到队列中。如果出现问题(没有互联网),则应存储请求,并在稍后尝试再次发送。
与此同时,可以创建更多请求。如果仍然没有网络,则所有新请求都应存储在队列中,并在网络恢复时再次发送。
打算实现相同的功能,想知道它是否已经实现。
EDIT1:我正在使用 HttpWebRequest 将 json 数据发布到/从服务器获取。
EDIT2:示例案例:
用户按下 Button1。第一个请求被发送,添加到队列,(互联网可用),应用程序得到答复,请求从队列中删除。
用户按下 Button2。发送第二个请求,添加到队列,没有互联网连接 -> 请求存储在队列中。
用户按下 Button3。第三个请求将被发送,但由于队列不为空,它只是存储到队列中。 Request2 尝试传递,但仍然没有连接。
一段时间后,再次建立连接,于是Request2成功,出队列,Request3也成功,出队列。
重要的是 - 它应该能够抵抗墓碑。如果电话在调用请求之前进入休眠状态,则应将其存储。如果请求正在进行中,则应将其取消(或者恰好不应存储此消息)。
EDIT3:为了避免交付异常,我使用了这个包装器:
public async Task<string> GetAsync(string url)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = HttpMethod.Get;
httpWebRequest.Accept = "application/json";
try
{
var response = (HttpWebResponse)await httpWebRequest.GetResponseAsync();
if (response == null || response.StatusCode != HttpStatusCode.OK)
return String.Empty;
string data;
using (var responseStream = response.GetResponseStream())
{
using (var postStreamReader = new StreamReader(responseStream))
{
data = await postStreamReader.ReadToEndAsync();
postStreamReader.Close();
}
responseStream.Close();
}
return data ?? String.Empty;
}
catch (Exception ex)
{
return String.Empty;
}
}
如果有异常则返回String.Empty,否则返回服务器应答的字符串。我现在需要的是一种模式,它可以保证调用成功(结果不为空),否则,将其保持在队列中(以保持顺序)并尝试再次调用,直到它被传递。
EDIT4:目前,我正在考虑在信号量中加入一个队列,并在需要强制推送时调用它。如果它能正常工作,有什么想法吗?
最佳答案
我做了一个简单的例子,它使用队列对象来保存请求的 URL 列表。基本上它只是一个一个地提出请求。并且总是在请求完成时发送一个 Completed 事件。然后由 Completed 事件的处理程序处理返回的页面或返回的错误条件。
此外,还有逻辑删除支持。基本上,当调用 Application_Deactivated 或 Application_Closing 回调时,它将队列保存到独立存储。如果应用程序从逻辑删除阶段返回,则将其加载到应用程序构造函数/Application_Activated 函数中。我希望这能让你开始。
http://www.mediafire.com/download/cncuwx1kttehv8y/PhoneApp15.zip
关于c# - HttpWebRequest 队列库,保证请求传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16878108/