Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest排队库,保证请求传递_C#_Windows Phone 7_Networking_Network Programming_Httpwebrequest - Fatal编程技术网

C# HttpWebRequest排队库,保证请求传递

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。发送第一个请求,将其添加到队列中(互联网可用),应用程序得到响应,请求从队列中删除

只是想知道,是否存在处理请求队列的框架类

发送请求时,应将is添加到队列中。如果出现问题(没有internet),则应存储请求,并在稍后尝试再次发送

同时,可以创建更多请求。如果仍然没有网络,则所有新请求都应存储在队列中,并在网络返回时再次发送

我们将使其具有相同的功能,想知道它是否已经实现


EDIT1:我正在使用HttpWebRequest向服务器发布/获取json数据

EDIT2:示例案例:

  • 用户按下按钮1。发送第一个请求,将其添加到队列中(互联网可用),应用程序得到响应,请求从队列中删除

  • 用户按下按钮2。第二个请求被发送,添加到队列中,队列中未存储任何internet连接->请求

  • 用户按下按钮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;
            }
        }
    
    公共异步任务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查询。不管怎样,谢谢你的链接,我会看一眼。忽略了电话标签。我自己忙于一个网络项目,忘了切换回“真实世界”:-)激活后不会删除队列文件,但一般来说,它可以正常工作。嗯。。是的,看起来很有前途。我没有