C# HttpWebRequest排队库,保证请求传递
只是想知道,是否存在处理请求队列的框架类 发送请求时,应将is添加到队列中。如果出现问题(没有internet),则应存储请求,并在稍后尝试再次发送 同时,可以创建更多请求。如果仍然没有网络,则所有新请求都应存储在队列中,并在网络返回时再次发送 我们将使其具有相同的功能,想知道它是否已经实现C# HttpWebRequest排队库,保证请求传递,c#,windows-phone-7,networking,network-programming,httpwebrequest,C#,Windows Phone 7,Networking,Network Programming,Httpwebrequest,只是想知道,是否存在处理请求队列的框架类 发送请求时,应将is添加到队列中。如果出现问题(没有internet),则应存储请求,并在稍后尝试再次发送 同时,可以创建更多请求。如果仍然没有网络,则所有新请求都应存储在队列中,并在网络返回时再次发送 我们将使其具有相同的功能,想知道它是否已经实现 EDIT1:我正在使用HttpWebRequest向服务器发布/获取json数据 EDIT2:示例案例: 用户按下按钮1。发送第一个请求,将其添加到队列中(互联网可用),应用程序得到响应,请求从队列中删除
EDIT1:我正在使用HttpWebRequest向服务器发布/获取json数据 EDIT2:示例案例:
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;
}
}
公共异步任务GetAsync(字符串url)
{
var httpWebRequest=(httpWebRequest)WebRequest.Create(url);
httpWebRequest.Method=HttpMethod.Get;
httpWebRequest.Accept=“application/json”;
尝试
{
var response=(HttpWebResponse)等待httpWebRequest.GetResponseAsync();
if(response==null | | response.StatusCode!=HttpStatusCode.OK)
返回字符串。空;
字符串数据;
使用(var responseStream=response.GetResponseStream())
{
使用(var postStreamReader=新StreamReader(responseStream))
{
数据=等待postStreamReader.ReadToEndAsync();
postStreamReader.Close();
}
responseStream.Close();
}
返回数据??字符串。空;
}
捕获(例外情况除外)
{
返回字符串。空;
}
}
它返回字符串。如果有任何异常,则返回空,否则返回服务器应答的字符串。我现在需要的是一个模式,它将保证调用成功(结果不是空的),否则,将其保持在队列中(以保持秩序),并尝试再次引发调用,直到调用被传递为止
EDIT4:现在,我正在考虑在信号灯中设置一个队列,并在需要强制推送时调用它。如果它可以正常工作,有什么想法吗?看看SPA(单页应用程序),它使用AJAX请求在客户端运行。您的服务器逻辑将从处理所有业务逻辑转变为使用JavaScript在客户机上完成的业务逻辑简单地提供客户机数据。这允许应用程序在没有服务器数据的情况下运行。然后,您可以处理404错误时希望它执行的操作,包括稍后重试。非常熟悉JavaScript。这是从内存中弹出的。但不确定是否以及如何实现持久性。 如果即使在重新启动浏览器后仍需要传递消息,则可以在使用本地存储中实现该部分 作为一个协议可以满足您的需求。这里有一个漂亮的图坦卡蒙: 其他选择: 一个完整的servicebus可能有点过分,但借用一些想法,它可以提供一个起点: 在C#中实现服务器端,并附带JS客户端
MassTransit的JS客户端:我制作了一个简单的示例,使用Queue对象保存请求URL的列表。基本上,它只是一个接一个地发出请求。并始终在请求完成时发送已完成事件。然后,由已完成事件的处理程序处理返回的页面或返回的错误条件 此外,还有墓碑的支持。基本上,当调用Application_停用或Application_关闭回调时,它会将队列保存到隔离存储中。如果应用程序从墓碑阶段返回,则将其加载到应用程序构造函数/应用程序激活函数中。我希望这能让你开始
很抱歉,我没有时间给出完整的答案,但是System.Threading.Tasks.Dataflow命名空间可能对您有一些非常有用的东西。为什么要进行向下投票?我不认为这是不必要的或无用的功能,是吗?保证请求传递意味着什么?对请求的响应情况如何?这些请求当然很重要?“Http请求不仅仅是“发即忘”的做法。@Davehiller好吧,这意味着,如果出现一些internet问题,请求将被存储并在以后传递。”。是的,我应该知道,如果我的请求成功地传递到服务器,HTTP请求通常类似于获取网页。您想对该请求的响应做什么?我使用HttpWebRequest向服务器发布/获取json数据。JavaScript不是问题:)问题是修改服务器,我真的不想这么做。很好的注意在未来,但现在我应该找到一个解决方案,这将保证消息传递到/从服务器。问题是关于Windows Phone 7。没有浏览器,只有JSON查询。不管怎样,谢谢你的链接,我会看一眼。忽略了电话标签。我自己忙于一个网络项目,忘了切换回“真实世界”:-)激活后不会删除队列文件,但一般来说,它可以正常工作。嗯。。是的,看起来很有前途。我没有