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排队库,保证请求交付 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 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排队库,保证请求交付

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