HttpWebRequest队列库,它保证请求的传递
本文关键字:请求 队列 HttpWebRequest | 更新日期: 2023-09-27 18:16:20
只是想知道,是否存在一类框架,可以处理请求队列。
发送请求时,应将其添加到队列中。如果有问题(没有网络),请求应该被存储,并尝试稍后再次发送。
同时,可以创建更多的请求。如果仍然没有网络,所有新请求都应该存储在队列中,并在网络返回时再次发送。
要做同样的功能,想知道它是否已经实现了。
EDIT1:我使用HttpWebRequest发布/获取json数据到/从服务器。
EDIT2:示例示例:
-
用户按下Button1。
第一个请求被发送,添加到队列中,(网络可用),应用程序得到应答,请求从队列中删除。 用户按下按钮2。第二个请求被发送,添加到队列中,没有internet连接->请求被存储在队列中
用户按下Button3。第三个请求将被发送,但由于队列不是空的,它只是存储到队列中。
一段时间后,连接再次建立,因此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。如果有异常则为空,否则返回服务器应答的字符串。我现在需要的是一个模式,它可以保证调用成功(结果不为空),否则,将其保持在队列中(以保持顺序)并尝试再次引发调用,直到它被交付。
EDIT4:现在,我正在考虑在一个信号量中有一个队列,当我需要强制推送时调用它。有什么想法,如果它会工作好吗?
我做了一个简单的例子,它使用Queue对象来保存请求的url列表。基本上它只是一个接一个地发出请求。并且总是在请求完成时发送一个Completed事件。然后由Completed事件的处理程序来处理返回的页面或返回的错误条件。
还有墓碑支持。基本上,当调用Application_Deactivated或Application_Closing回调时,它将队列保存到隔离的存储中。如果应用从tombstone阶段返回,就把它加载到应用构造函数/Application_Activated函数中。我希望这能让你开始。
http://www.mediafire.com/download/cncuwx1kttehv8y/PhoneApp15.zip对不起,我没有时间给出一个非常完整的答案,但是System.Threading.Tasks.Dataflow名称空间可能对您有一些非常有用的东西
看看使用AJAX请求在客户端运行的SPA(单页应用程序)。您的服务器逻辑将从处理所有业务逻辑转变为使用JavaScript在客户端完成的业务逻辑简单地向客户端提供数据。这允许应用程序在没有服务器数据的情况下运行。然后,您可以在404错误的情况下处理您希望它做的事情,包括稍后再试一次。熟悉JavaScript
这是从记忆中突然出现的。但不确定是否以及如何实现持久性。如果消息需要在浏览器重新启动后传递,您可以使用本地存储来实现这部分。
Stomp作为协议可以满足您的需求。不错的tut: http://blog.mayflower.de/2011-Message-Queues-for-web-applications-with-STOMP.html
其他选项:jQuery的Messagebus
一个完整的服务总线可能有点过分,但借鉴一些想法,它可以提供一个良好的开端:
pServicebus在c#中实现服务器端,并附带JS-client
MassTransit- js