摘要

在网络传输过程中,不能保证所有的请求都能正确的被服务端接受或者处理,那么进行简单的重试可以进行简单的补救。比如现在大部分支付功能,在支付成功之后,需要回调我们网站的接口,并且要求我们的接口给一个类似成功的响应,支付端收到我们的成功响应,就不再进行重试请求了。

比如:支付宝文档中有这么一段描述

Polly简单实用

        private ILog _log;
/// <summary>
/// 重试时间点
/// </summary>
private TimeSpan[] _retryTimes = new[] {
TimeSpan.FromSeconds(),
TimeSpan.FromSeconds(),
TimeSpan.FromSeconds(),
TimeSpan.FromSeconds(),
TimeSpan.FromMinutes(1)
};
/// <summary>
/// 提交文本
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <returns></returns>
public string PostTxt(string url, Dictionary<string, string> paras)
{
try
{
                     string data = ConvertDic2QueryString(paras);
byte[] byteArray = Encoding.UTF8.GetBytes(data);
                var retry4TimePolicy = Polly.Policy.Handle<WebException>().WaitAndRetry(
_retryTimes,
(ex, ts, i, context) =>
{
_log.Info(new LogModel
{
Content = $"Request:{url},data:{ConvertDic2QueryString(paras)},第{i}次重试",
userId= "",
Op = "posttxt"
});
});
return retry4TimePolicy.Execute(() =>
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.ContentLength = byteArray.Length;
request.Timeout = ;
if (url.StartsWith("https"))
{
request.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
}
Stream requestStream = request.GetRequestStream();
requestStream.Write(byteArray, , byteArray.Length);
HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
String sResult = reader.ReadToEnd();
requestStream.Close();
reader.Close();
webResponse.Close();
return sResult;
}); }
catch (WebException ex)
{
throw ex;
} }
  public string ConvertDic2QueryString(Dictionary<string, string> dic)
{
if (dic == null)
{
return string.Empty;
}
StringBuilder sb = new StringBuilder();
foreach (var key in dic.Keys)
{
sb.AppendFormat("{0}={1}&", key, HttpUtility.UrlEncode(dic[key])); }
return sb.ToString().TrimEnd('&');
}

可以类似上面的一种请求,在捕获到webException异常时,立马重试一次,检查网络是否正常,如果仍不能正确进行请求,下次5s,10s,20s,进行尝试,如果仍不正常,则在1分钟后进行最后尝试。否则认为网络不正常,则抛出异常,进行日志记录。

总结

Polly支持多种重试策略,感兴趣的可以移步这里。

https://www.cnblogs.com/CreateMyself/p/7589397.html

http://www.cnblogs.com/xishuai/p/asp-net-core-polly.html

[Asp.net core]使用Polly网络请求异常重试的更多相关文章

  1. ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客

    原文:ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客 版权声明:本文为starfd原创文章,转载请标明出处. https://blog.csd ...

  2. Asp.net Core 入门实战 2.请求流程

    Asp.Net Core 是开源,跨平台,模块化,快速而简单的Web框架. Asp.net Core官网的一个源码合集,方便一次性Clone,喜欢的(Star),本系列持续更新,也可以通过我的网站访问 ...

  3. asp.net core 自定义认证方式--请求头认证

    asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思 ...

  4. ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击 (转载)

    什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互.这种攻击是完全有可能的 ...

  5. asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。

    原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...

  6. ASP.NET Core - 实现Http自定义请求头策略

    前言 在正常的情况下,当我们系统用到JWT认证方式时,需要在Http请求头添加Authorization: XXX,这样在后台服务的控制器中打上[Authorize]授权标签,就限定所有的请求必须通过 ...

  7. ASP.NET Core错误处理中间件[3]: 异常处理器

    DeveloperExceptionPageMiddleware中间件错误页面可以呈现抛出的异常和当前请求上下文的详细信息,以辅助开发人员更好地进行纠错诊断工作.ExceptionHandlerMid ...

  8. c# .net core 下的网络请求

    本文章是在VS2017的环境下,.net core 1.1版本以上. 在这期间,由于.net core 并不基于IIS,我们的过去的网络请求代码在.net core框架下,有可能会出现不兼容,报错的现 ...

  9. ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击

    什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互.这种攻击是完全有可能的 ...

随机推荐

  1. Oracle SQL部分练习题

    SQL练习题        注:查询列表不建议用 “*” 1.列出至少有一个雇员的所有部门: a. select * from dept where deptno in(select distinct ...

  2. PHP中curl模拟post上传及接收文件

    public function Action_Upload(){ $this->path_config(); exit(); $furl="@d:\develop\JMFramewor ...

  3. 基于用Path.Combine的优化

    Path.Combine: 什么时候会用到Path.Combine呢?,当然是连接路径字符串的时候! 所以下面的代码可以完美的工作: public static void Main() { strin ...

  4. java8中ConcurrentHashMap

    HashMap的线程不安全主要体现在resize时的死循环及使用迭代器时的fast-fail上. Fast-fail: fail-fast 机制是java集合(Collection)中的一种错误机制. ...

  5. poj 3468 线段树 成段增减 区间求和

    题意:Q是询问区间和,C是在区间内每个节点加上一个值 Sample Input 10 51 2 3 4 5 6 7 8 9 10Q 4 4Q 1 10Q 2 4C 3 6 3Q 2 4Sample O ...

  6. K8S Dashborad登陆认证文档

    K8S Dashboard是官方的一个基于WEB的用户界面,专门用来管理K8S集群,并可展示集群的状态.因为我们使用kubeadm搭建的集群会默认开启RABC(角色访问控制机制),所以我们必须要进行额 ...

  7. CSS3中border-image属性详解

    border-images可以说也是CSS3中的重量级属性,如同圆角.边框颜色属性border-color.块阴影属性一样,也是属于边框属性中的一员. 从其字面意思上看,我们可以理解为“边框-图片”, ...

  8. stm32+ESP8266AT指令详细说明

    最近公司团队的项目用到ESP8266,使用的是stm32c8t6芯片,软件使用MDK,于是写下调试过程中的一些注意点.具体代码和涉及思路不能外泄,这里只给出我们调试过程中的注意的方面. 关于ESP82 ...

  9. 【LOJ】#2270. 「SDOI2017」天才黑客

    题解 显然要记录每个点来的状态,这样会扩充出点度的平方条边,就gg了 删掉所有的点,把每个边拆成两个点,连一条边权为c 这个时候我们考虑对于原先的每个点,将所有与其相连边所需要的节点(不管是进入还是出 ...

  10. 016 jquery中html与val得到使用

    1.属性操作 2.设置html . 3.程序(关于html) <!DOCTYPE html> <html> <head> <meta charset=&quo ...