只是想知道是否存在框架类来处理请求排队。
发送请求时,应将其添加到队列中。如果出现问题(没有互联网),则应存储请求,并稍后尝试再次发送。
同时,可以创建更多请求。如果仍然没有网络,则所有新请求都应存储在队列中,并在网络恢复时再次发送。
打算实现相同的功能,想知道它是否已经实现。
EDIT1:我正在使用 HttpWebRequest 向服务器发布/从服务器获取 json 数据。
编辑2:示例案例:
用户按下按钮 1。第一个请求被发送,添加到队列中(互联网可用),应用程序得到答复,请求从队列中删除。
用户按下按钮 2。发送第二个请求,添加到队列中,没有互联网连接 -> 请求存储在队列中。
用户按下按钮 3。第三个请求将被发送,但由于队列不为空,因此它只是存储到队列中。 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:目前,我正在考虑在信号量中建立一个队列,并在需要强制推送时调用它。有什么想法如果它能正常工作吗?
我做了一个简单的例子,它使用 Queue 对象来保存请求的 URL 列表。基本上它只是一一提出请求。并且在请求完成时始终发送 Completed 事件。然后由 Completed 事件的处理程序来处理返回的页面或返回的错误条件。
此外,还有墓碑支持。基本上,当调用 Application_Deactivated 或 Application_Closing 回调时,它将队列保存到隔离存储中。如果应用程序从逻辑删除阶段返回,则将其加载到应用程序构造函数/Application_Activated 函数中。我希望这能让你开始。
http://www.mediafire.com/download/cncuwx1kttehv8y/PhoneApp15.zip http://www.mediafire.com/download/cncuwx1kttehv8y/PhoneApp15.zip
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)