.net core并发请求发送HttpWebRequest的坑解决
 更新时间:2018年12月16日 11:23:15   作者:lee576  

这篇文章主要给大家介绍了关于.net core并发请求发送HttpWebRequest的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧

在framework中,大量并发 HttpWebRequest 需要设置一个最大连接数

ServicePointManager.DefaultConnectionLimit = 200;

但是在.net core中却无效,因为core不使用 ServicePointManager 管理连接数,在core中只有使用HttpClient,HttpCilentFactory来管理连接数,如果在core中使用 ServicePointManager 不但不起作用,并且大量并发使用 HttpWebRequest 会导致 IIS 直接假死,所以在core中,只能使用 HttpClient 和 HttpCilentFactory这一条路可走
在Core中的StartUp注册一个HttpClient的名字

public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient(“HttpClientFactoryDemo”);
}

然后在Controller中创建

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNetCore.Mvc;

namespace HttpClientFactoryDemo.Controllers
{
[Route(“api/[controller]”)]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly IHttpClientFactory _httpClientFactory;

public ValuesController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}

public static string UrlEncode(string temp, Encoding encoding)
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < temp.Length; i++)
{
string t = temp[i].ToString();
string k = HttpUtility.UrlEncode(t, encoding);
if (t == k)
{
stringBuilder.Append(t);
}
else
{
stringBuilder.Append(k.ToUpper());
}
}
return stringBuilder.ToString();
}

[HttpGet]
public async Task<ActionResult> Get()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string xmlContent = “<?xml version=\\”1.0\\” encoding=\\”GBK\\” standalone=\\”yes\\”?><xml><version>1</version><ins_cd>08A9999999</ins_cd><mchnt_cd>0002900F0370588</mchnt_cd><term_id></term_id><random_str>93b4efa6d0d84808a76355ff0f7a178d</random_str><sign>G1+TBpyEVwsQjeJ9X7zrObRTFtI/ItuJWEEYl3AT/9XlFd844Jv2Wb/gNVkuEVP890Tf1Ub+EaTe1qByHSu97cpQr6riuDxqw2nnjKZBZsG00C1d8070sZPf4c1hkSUfhlR2nPn+7dvIanLCjRFzTgoTQ/WtcArrL/SJIJeaXYg=</sign><order_type>ALIPAY</order_type><goods_des>卡盟测试</goods_des><goods_detail></goods_detail><addn_inf></addn_inf><mchnt_order_no>2018121302054468584629</mchnt_order_no><curr_type></curr_type><order_amt>1</order_amt><term_ip>127.0.0.1</term_ip><txn_begin_ts>20181213020544</txn_begin_ts><goods_tag></goods_tag><auth_code>288232051781304899</auth_code><sence>1</sence><reserved_sub_appid></reserved_sub_appid><reserved_limit_pay></reserved_limit_pay></xml>”;
xmlContent = UrlEncode(xmlContent, Encoding.GetEncoding(“GBK”));

Dictionary<string, string> nvs = new Dictionary<string, string> { { “req”, xmlContent } };
Encoding encoding = Encoding.GetEncoding(“GBK”);
StringBuilder buffer = new StringBuilder();
int i = 0;
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(nvs);
foreach (KeyValuePair<string, string> kvp in nvs)
{
buffer.AppendFormat(i > 0 ? “&{0}={1}” : “{0}={1}”, kvp.Key,
UrlEncode(kvp.Value, Encoding.GetEncoding(“GBK”)));
i++;
}
byte[] postBody = encoding.GetBytes(buffer.ToString());

var client = _httpClientFactory.CreateClient(“HttpClientFactoryDemo”);
var request = new HttpRequestMessage
{
RequestUri = new Uri(“spay.fuiou.com/commonQuery”),
Method = HttpMethod.Post,
Content = new ByteArrayContent(postBody),
};

request.Content.Headers.ContentType =
new MediaTypeHeaderValue(“application/x-www-form-urlencoded”);

return Ok(await client.SendAsync(request));

}
}
}

总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。

您可能感兴趣的文章:C#中HttpWebRequest、WebClient、HttpClient的使用详解C#使用HttpWebRequest重定向方法详解C#基于HttpWebRequest实现发送HTTP请求的方法分析C#使用HttpWebRequest与HttpWebResponse模拟用户登录C# httpwebrequest访问HTTPS错误处理方法C#中HttpWebRequest的用法详解C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法UnityWebRequest前后端交互实现过程解析

core
并发请求
httpwebreques

相关文章
viewstate和datatable动态录入数据示例这篇文章主要介绍了viewstate和datatable动态录入数据示例,需要的朋友可以参考下 2014-02-02
asp.net 分页潜谈最近研究了一下Asp.net下的分页功能。以前受前辈们的误导,人云已云的以为做分页很难很麻烦。这一研究才发现,分页也不过如此嘛。
2009-06-06
通过剪贴板实现将DataGridView中的数据导出到Excel这篇文章主要介绍了如何通过剪贴板实现将DataGridView中的数据导出到Excel,需要的朋友可以参考下 2014-05-05
Asp.net mvc 数据调用示例代码Asp.net mvc 数据调用示例代码,学习asp.net mvc框架的朋友可以参考下。 2010-10-10
asp.net实现的DES加密解密操作示例这篇文章主要介绍了asp.net实现的DES加密解密操作,结合具体实例形式分析了asp.net实现DES加密与解密算法的实现技巧,需要的朋友可以参考下 2017-07-07
ASP.NET使用AjaxPro实现前端跟后台交互详解这篇文章主要为大家详细介绍了ASP.NET使用AjaxPro实现前端跟后台交互,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-07-07
mvc重定向方式详解这篇文章主要为大家详细介绍了mvc重定向的几种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-02-02
ASP.NET中生成Excel遇到的问题及改进方法这是在项目中使用的生成Excel的一个方法(其实是我在网上收集),用了半年时间,并未出现异常情况。近日当我再次使用该方法生成Excel的时候出现了问题 2011-02-02
mvc下,3种窗口弹出设置的方法想做页面美化,特别是在一个页面中,只占了很小一块的页面,想做成弹出窗口样式,稍微总结了下: 2013-07-07
详解VS2017 Linux 上.NET Core调试这篇文章主要介绍了详解VS2017 Linux 上.NET Core调试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-04-04

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。