HttpWebRequest排队库,保证请求交付

2024-01-10

只是想知道是否存在框架类来处理请求排队。

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

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

打算实现相同的功能,想知道它是否已经实现。

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

编辑2:示例案例:

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

  2. 用户按下按钮 2。发送第二个请求,添加到队列中,没有互联网连接 -> 请求存储在队列中。

  3. 用户按下按钮 3。第三个请求将被发送,但由于队列不为空,因此它只是存储到队列中。 Request2 尝试传送,但仍然没有连接。

  4. 一段时间后,连接再次建立,因此Request2成功,从队列中删除,然后Request3也成功并从队列中删除。

  5. 重要的是——它应该能够抵抗墓碑效应。如果电话在呼叫请求之前进入睡眠状态,则应将其存储。如果请求正在进行中,则应将其取消(或者确切地说不应存储此消息)。

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(使用前将#替换为@)

HttpWebRequest排队库,保证请求交付 的相关文章

  • 如何在 C# 中知道 PID 和 VID 来发现虚拟 COM 端口名称

    如果我知道 PID 和 VID 我会尝试找到查找 COM 端口名称的正确方法 到目前为止 我写了解决方法 但我不相信没有更优雅和正确的方法 顺便说一句 我知道我可以使用 REGEX 编写此代码只是为了测试解决方法 我知道还有很大的改进空间
  • 从 C 中的 char* 获取单个字符

    有没有办法在 C 中逐字符遍历或从 char 中提取单个字符 考虑以下代码 现在获得单个角色的最佳方式是什么 建议我一种不使用任何字符串函数的方法 char a STRING 其他方式 char i for i a i i i points
  • 如何重命名序列化对象列表后生成的 XML 属性

    我正在序列化对象列表List
  • dup2() 和 exec()

    include
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 如何在Azure功能中添加razor视图文件?

    我正在创建一个应用程序 它是 azure 函数项目 我想在该项目中使用 Razor 视图 我应该在 azure 函数中使用任何模板引擎吗 得益于一些方面的进步剃刀之光项目 https github com toddams RazorLigh
  • 修改正在运行的可执行文件的资源内容

    All 我将应用程序设置存储在资源中 当我的程序首次加载时 我使用 WinAPI 读取指定的资源 然后我解析检索到的字节数据 这对我来说完美无缺 现在假设用户更改了我的应用程序中的设置 他 她检查复选框控件 我想将更新的设置保存到我的资源中
  • Identity Server 4:添加访问令牌的声明

    我正在使用 Identity Server 4 和隐式流 并且想要向访问令牌添加一些声明 新的声明或属性是 tenantId 和 langId 我已将 langId 添加为我的范围之一 如下所示 然后通过身份服务器请求 但我也获得了tena
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • 为什么 httpRuntime targetFramework="4.5" 禁止抓取 .ASPXAUTH cookie?

    当我的 web config 具有以下 httpRuntime 时 我的控制器无法获取 cookie ASPXAUTH 它似乎能够获取任何其他 cookie 无论带或不带句点前缀 如果我删除下面的行 它就可以正常工作
  • 为什么我无法调试动态加载的程序集?

    我正在开发一个 Web API 项目 该项目使用内部模拟框架 允许拦截和修改来自控制器的响应 它使用 MEF 加载包含某些先决条件匹配时执行的代码的程序集 我知道这是正常工作的 因为我可以在响应中看到模拟已被执行 但由于某种原因我无法调试动
  • 我可以对(非成员)函数使用部分模板特化吗?

    我试图在 非成员 函数上使用部分模板专业化 但我在语法上遇到了问题 我在 StackOverflow 中搜索了其他部分模板专业化问题 但这些问题涉及类或成员函数模板的部分专业化 作为起点 我有 struct RGBA RGBA uint8
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • 如何在 Visual Studio 2010 Express 中引用 system.drawing?

    我对此有点陌生 我的印象是要绘制我创建的矩形 我需要使用 system drawing graphics 问题是 我收到错误 命名空间 System 中不存在类型或命名空间名称 drawing 您是否缺少程序集引用 当我右键单击解决方案资源
  • #define 内存地址声明

    这个 define 语句有什么作用 它用于定义内存地址 但我不明白 uint32 t 部分 define GPxDAT uint32 t 0x6FC0 通常用于访问映射到地址空间的硬件寄存器 或者一些特定的内存地址 硬件寄存器应定义为vol
  • 替换全局热键

    我有一个位于托盘中的应用程序 我想定义多个热键来触发我的程序中的事件 我从 AaronLS 在这个问题中的出色回答中找到了灵感 使用C 设置全局热键 https stackoverflow com a 27309185 3064934 如果
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1

随机推荐

  • opencv如何填充空心线

    I have an image like this after I applied some processings e g cv2 Canny it looks like this now 正如您所看到的 黑线变得空心 我尝试过腐蚀和膨胀
  • python模拟函数未调用

    我正在测试 python 代码 一个 django 3 0 5 项目 尽管我认为它不相关 但我无法调用我的模拟对象的函数 这是我的代码 myproject mypackage myhelpers def get dict return di
  • 当变量等于x时触发事件 - python

    我有以下脚本 每次按下按钮时都会增加计数器 当计数器达到某个数字 即 10 时 可以说我想要触发一个事件 from RPi import GPIO from time import sleep clk 25 dt 8 GPIO setmod
  • 无法从 RecyclerView.OnScrollListener 调用 notificationItemInserted()

    最近我升级了我的recyclerview v7 23 to recyclerview v7 24 2 0 我的应用程序有一个无限滚动列表 错误消息指向该行notifyItemInserted当我将加载视图添加到RecyclerView 空对
  • 将数据追加到 localStorage 对象

    我正在尝试将新对象添加到当前的 localStorage 对象 但没有成功 最后 我得到的不是 localStorage 中的两组数据 而是最后一组数据 对我做错了什么有任何见解吗 谢谢 这就是我想做的 add the first stud
  • Electron - node.js - ng :无法加载文件路径\ng.ps1,因为在此系统上禁用了运行脚本

    我正在尝试编译一个项目Windows 10 in Visual Studio Code 我的设置如下 1 npm版本6 12 2 Node js版本12 13 3 Angular CLI 8 3 19 我遇到的问题是当我尝试运行时ng se
  • Spring MVC 覆盖接收到的内容类型

    我正在开发 Spring MVC 应用程序 并且有一个我无法控制的客户端 该客户端正在 POST JSON 数据 但传输application x www form urlencoded标头 Spring 自然信任此标头并尝试接收数据 但由
  • AMD:javascript 上下文的目的是什么?

    关于AMD 异步模块定义 我读到的阶段是这样的 AMD 格式来自于想要一种比 今天的 编写一堆带有隐式依赖关系的脚本标签 你必须手动订购 和一些易于使用的东西 直接在浏览器中 javascript 上下文的目的是什么 你能举个例子吗 使用
  • SQLiteDiskIOException:创建数据库时磁盘 I/O 错误

    我正在使用以下代码在 android 中创建数据库 public class PackageDBHelper extends SQLiteOpenHelper The Android s default system path of you
  • 向 li 元素添加自动增量值

    我是一名 css 设计师 所以请原谅我不了解任何 js 基本上我想知道如何使用 javascript jquery 将自动增量 id 添加到列表项中 以获取我试图添加一些 css 的内容 before li a href Item numb
  • 从 C# 对象动态构建 SQL WHERE 子句 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 HTTP POST 请求在与 asp net Web API 绑定的 HTML 表中创建过
  • 原则 2:错误:类“..\..”没有名为“...”的字段或关联

    在搜索时 我发现了许多有类似问题的人的结果 但它们总是与关联错误有关 我正在尝试将一个简单的文本字段添加到数据库中的表中 但在我的一生中 我无法弄清楚这次有什么不同 当我以前多次这样做时没有出现任何问题 我已将 record checksu
  • 形成相同 AVL 和展开树的序列?

    是否存在这样一个数字序列 1 7 使用所有数字 每个数字仅一次 可以形成相等的 AVL 和展开树 好吧 出于科学的兴趣 我根据各自的维基百科文章在 Python 中实现了 AVL 和展开树 假设我没有在某个地方犯错误 我的发现是不存在产生相
  • 内存使用率高 - 应用程序响应缓慢:已用内存值没有减少 + 可用内存值没有增加

    当应用程序使用几分钟后 它会慢慢增加Used记忆值和减少Free记忆值 几分钟后应用程序变得非常慢 为什么不释放内存 系统配置 CPU Intel R Xeon R Platinum 8175M CPU 2 50GHz 处理器数量 4 CP
  • 指向对象开头的指针 (C++)

    我需要一种方法来获取指向 C 中对象开头的指针 该对象在模板内部使用 因此它可以是任何类型 多态或非多态 并且可能是使用多重继承的对象 I found 本文 http accu org index php journals 450它描述了一
  • 使用 Catalyst 移植到 Mac 时排除 pod

    将应用程序移植到 Mac 终于成为可能 这要归功于Catalyst问题是 许多 pod 不支持 AppKit 最常见的是 Crashlytics Firebase In Pods Crashlytics iOS Crashlytics fr
  • 在 Db2 中处理 BOOLEAN 值的最佳方法是什么?

    Database Db2 Scenario 我有一个专栏需要是真还是假 我找到了两个资源来说明如何实现这一目标 但是 当我将它们放在一起时 我收到错误 布尔值 https www ibm com support knowledgecente
  • 如何从ganglia的数据库中获取数据

    我想使用 ganglia 的数据来分析我们的集群 但我不知道 ganglia 的数据库在哪里 以前有人这样做过吗 gmetad 上存储指标数据的是rrd 文件 通常默认路径是 var lib ganglia rrds
  • 中使用 readonly 属性而不改变光标

    如果我有一个
  • HttpWebRequest排队库,保证请求交付

    只是想知道是否存在框架类来处理请求排队 发送请求时 应将其添加到队列中 如果出现问题 没有互联网 则应存储请求 并稍后尝试再次发送 同时 可以创建更多请求 如果仍然没有网络 则所有新请求都应存储在队列中 并在网络恢复时再次发送 打算实现相同