|
|
|
@ -21,12 +21,12 @@
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## 0、准备工作:先执行下面单元,以启动WebApi及设置全局对象、方法及其它"
|
|
|
|
|
"## 准备工作:先执行下面单元,以启动WebApi及设置全局对象、方法及其它"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 1,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "csharp"
|
|
|
|
@ -43,6 +43,7 @@
|
|
|
|
|
"//全局设置\n",
|
|
|
|
|
"#r \"./Publish/HttpClientStudy.Core/HttpClientStudy.Core.dll\"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"//全局命名空间引用\n",
|
|
|
|
|
"global using System.Net;\n",
|
|
|
|
|
"global using System.Net.Http;\n",
|
|
|
|
|
"global using System.Diagnostics;\n",
|
|
|
|
@ -56,13 +57,20 @@
|
|
|
|
|
"global using HttpClientStudy.Core;\n",
|
|
|
|
|
"global using HttpClientStudy.Core.Utilities;\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"var global_queryDomain = \"soft.pwidc.cn\";\n",
|
|
|
|
|
"var global_queryPort = 80;\n",
|
|
|
|
|
"var global_queryBaseUrl = $\"http://{global_queryDomain}:{global_queryPort}\";\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"var global_ips = Dns.GetHostAddresses(global_queryDomain);\n",
|
|
|
|
|
"//全局共享变量\n",
|
|
|
|
|
"var global_api_config = HttpClientStudy.Config.WebApiConfigManager.GetWebApiConfig();\n",
|
|
|
|
|
"var global_ips = Dns.GetHostAddresses(global_api_config.Host);\n",
|
|
|
|
|
"var global_queryIp = global_ips.First().ToString();\n",
|
|
|
|
|
"var global_netstat_filter = $\"{global_queryIp}:{global_queryPort}\";"
|
|
|
|
|
"if(global_api_config.Host.Contains(\"localhost\"))\n",
|
|
|
|
|
"{\n",
|
|
|
|
|
" global_queryIp = \"127.0.0.1\";\n",
|
|
|
|
|
"}\n",
|
|
|
|
|
"var global_default_page = $\"{global_api_config.PathBase}/Normal/GetAllAccounts\";\n",
|
|
|
|
|
"//启动WebAPI程序\n",
|
|
|
|
|
"var global_netstat_filter = $\"{global_queryIp}:{global_api_config.Port}\";\n",
|
|
|
|
|
"var global_webapi_file = Path.GetFullPath(\"./Publish/HttpClientStudy.WebApp/HttpClientStudy.WebApp.exe\", Environment.CurrentDirectory); \n",
|
|
|
|
|
"var message = AppUtility.RunWebApiExeFile(global_webapi_file);\n",
|
|
|
|
|
"Console.WriteLine(message);"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -89,7 +97,7 @@
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"{ //大括号: 1、作用域隔离 2、方便整体代码折叠\n",
|
|
|
|
|
" Console.WriteLine(global_queryDomain);\n",
|
|
|
|
|
" Console.WriteLine(global_api_config.BaseUrl);\n",
|
|
|
|
|
"}"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
@ -152,7 +160,7 @@
|
|
|
|
|
"$WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore\n",
|
|
|
|
|
"if($null -eq $WebAppProc)\n",
|
|
|
|
|
"{\n",
|
|
|
|
|
" Write-Host \"进程没有找到,可能已经\"\n",
|
|
|
|
|
" Write-Host \"进程没有找到,可能已经关闭\"\n",
|
|
|
|
|
"}\n",
|
|
|
|
|
"else {\n",
|
|
|
|
|
" $WebAppProc.Kill();\n",
|
|
|
|
@ -197,13 +205,16 @@
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"using System.Net.Http;\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"var handler = new SocketsHttpHandler\n",
|
|
|
|
|
"{\n",
|
|
|
|
|
" // Recreate every 15 minutes\n",
|
|
|
|
|
" PooledConnectionLifetime = TimeSpan.FromMinutes(15) \n",
|
|
|
|
|
"};\n",
|
|
|
|
|
"var sharedClient = new HttpClient(handler);"
|
|
|
|
|
" var handler = new SocketsHttpHandler\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" // 15分钟\n",
|
|
|
|
|
" PooledConnectionLifetime = TimeSpan.FromMinutes(15) \n",
|
|
|
|
|
" };\n",
|
|
|
|
|
" var sharedClient = new HttpClient(handler);\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" sharedClient.Display();\n",
|
|
|
|
|
"}"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -284,15 +295,19 @@
|
|
|
|
|
},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"using System.Net.Http;\n",
|
|
|
|
|
"var socketsHandler = new SocketsHttpHandler\n",
|
|
|
|
|
"//手动配置 SocketsHttpHandler\n",
|
|
|
|
|
"{\n",
|
|
|
|
|
"\tPooledConnectionLifetime = TimeSpan.FromMinutes(10),\n",
|
|
|
|
|
"\tPooledConnectionIdleTimeout = TimeSpan.FromMinutes(5),\n",
|
|
|
|
|
"\tMaxConnectionsPerServer = 10\n",
|
|
|
|
|
"};\n",
|
|
|
|
|
"\t\n",
|
|
|
|
|
"var client = new HttpClient(socketsHandler);"
|
|
|
|
|
"\tvar socketsHandler = new SocketsHttpHandler\n",
|
|
|
|
|
"\t{\n",
|
|
|
|
|
"\t\tPooledConnectionLifetime = TimeSpan.FromMinutes(10),\n",
|
|
|
|
|
"\t\tPooledConnectionIdleTimeout = TimeSpan.FromMinutes(5),\n",
|
|
|
|
|
"\t\tMaxConnectionsPerServer = 10\n",
|
|
|
|
|
"\t};\n",
|
|
|
|
|
"\t\t\n",
|
|
|
|
|
"\tvar client = new HttpClient(socketsHandler);\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tclient.Display();\n",
|
|
|
|
|
"}"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -328,6 +343,8 @@
|
|
|
|
|
"source": [
|
|
|
|
|
"//测试连接寿命\n",
|
|
|
|
|
"{\n",
|
|
|
|
|
" Console.WriteLine(\"程序运行大约要10-20秒,请在程序退出后,执行下面命令行查看网络情况\");\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" //自定义行为\n",
|
|
|
|
|
" var socketsHandler = new SocketsHttpHandler\n",
|
|
|
|
|
" {\n",
|
|
|
|
@ -341,15 +358,24 @@
|
|
|
|
|
" MaxConnectionsPerServer = 10\n",
|
|
|
|
|
" };\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" var client = new HttpClient(socketsHandler);\n",
|
|
|
|
|
" var client = new HttpClient(socketsHandler)\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" BaseAddress = new Uri(global_api_config.BaseUrl)\n",
|
|
|
|
|
" };\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" var displayer = \"\".Display();\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" for (var i = 0; i < 5; i++)\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" _ = await client.GetAsync(global_queryBaseUrl);\n",
|
|
|
|
|
" if(i>0)\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" await Task.Delay(TimeSpan.FromSeconds(2));\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
" _ = await client.GetAsync(global_default_page);\n",
|
|
|
|
|
" displayer.Update(($\"第{i+1}次请求完成\"));\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" await Task.Delay(TimeSpan.FromSeconds(2));\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" Console.WriteLine(\"程序运行大约要10-20秒,请在程序退出后,执行下面命令行查看网络情况\");\n",
|
|
|
|
|
"}"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
@ -381,7 +407,6 @@
|
|
|
|
|
"\n",
|
|
|
|
|
"Write-Host \"请先执行上面的单元,再执行本单元\"\n",
|
|
|
|
|
"Write-Host \"网络状态\"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"netstat -ano | findstr $queryFilter"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
@ -395,7 +420,7 @@
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 20,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "csharp"
|
|
|
|
@ -407,33 +432,12 @@
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"47.103.77.66\n",
|
|
|
|
|
"程序运行大约要10-20,请在程序退出后,执行下面命令行查看网络情况\n",
|
|
|
|
|
" TCP 192.168.1.151:14073 47.103.77.66:80 TIME_WAIT 0\n",
|
|
|
|
|
" TCP 192.168.1.151:14079 47.103.77.66:80 TIME_WAIT 0\n",
|
|
|
|
|
" TCP 192.168.1.151:14085 47.103.77.66:80 TIME_WAIT 0\n",
|
|
|
|
|
" TCP 192.168.1.151:14092 47.103.77.66:80 TIME_WAIT 0\n",
|
|
|
|
|
" TCP 192.168.1.151:14101 47.103.77.66:80 ESTABLISHED 39888\n",
|
|
|
|
|
"\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"{ //\n",
|
|
|
|
|
" var ips = await Dns.GetHostAddressesAsync(global_queryDomain);\n",
|
|
|
|
|
" string firstIp = ips.FirstOrDefault().ToString();\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" foreach (var ipAddress in ips)\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" Console.WriteLine(ipAddress.MapToIPv4().ToString());\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"//程序池设置\n",
|
|
|
|
|
"{ \n",
|
|
|
|
|
" //自定义行为\n",
|
|
|
|
|
" Console.WriteLine(\"程序运行大约要10-20,请在程序退出后,执行下面命令行查看网络情况\");\n",
|
|
|
|
|
" var socketsHandler2 = new SocketsHttpHandler\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" PooledConnectionLifetime = TimeSpan.FromSeconds(1),\n",
|
|
|
|
@ -441,7 +445,12 @@
|
|
|
|
|
" MaxConnectionsPerServer = 1\n",
|
|
|
|
|
" };\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" var client2 = new HttpClient(socketsHandler2);\n",
|
|
|
|
|
" var client2 = new HttpClient(socketsHandler2)\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" BaseAddress = new Uri(global_api_config.BaseUrl)\n",
|
|
|
|
|
" };\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" var displayer = \"\".Display();\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" for (var i = 0; i < 5; i++)\n",
|
|
|
|
|
" {\n",
|
|
|
|
@ -449,13 +458,14 @@
|
|
|
|
|
" {\n",
|
|
|
|
|
" await Task.Delay(TimeSpan.FromSeconds(2));\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
" _ = await client2.GetAsync(global_queryBaseUrl);\n",
|
|
|
|
|
" _ = await client2.GetAsync(global_default_page);\n",
|
|
|
|
|
" displayer.Update(($\"第{i+1}次请求完成\"));\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" await Task.Delay(TimeSpan.FromSeconds(2));\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" Console.WriteLine(\"程序运行大约要10-20,请在程序退出后,执行下面命令行查看网络情况\");\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" //调用命令行,显示查看网络情况\n",
|
|
|
|
|
" string command = $\"netstat -ano | findstr {firstIp}\";\n",
|
|
|
|
|
" string command = $\"netstat -ano | findstr {global_netstat_filter}\";\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" // 创建一个新的ProcessStartInfo对象\n",
|
|
|
|
|
" ProcessStartInfo startInfo = new ProcessStartInfo(\"cmd\", $\"/c {command}\")\n",
|
|
|
|
@ -514,7 +524,7 @@
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 2,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "csharp"
|
|
|
|
@ -526,20 +536,7 @@
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"开始请求网络...\n",
|
|
|
|
|
"共请求了200次,耗时 24989 毫秒\n",
|
|
|
|
|
"当前网络状态\n",
|
|
|
|
|
" TCP 192.168.1.151:18018 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18019 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
"\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"/*\n",
|
|
|
|
|
"\t功能:将MaxConnectionsPerServer限制为2。然后启动200个任务,每个任务都向同一端点发出HTTP请求。这些任务将同时运行。所有请求竞争所花费的时间将写入控制台。\n",
|
|
|
|
@ -554,11 +551,14 @@
|
|
|
|
|
"\t\tMaxConnectionsPerServer = 2\n",
|
|
|
|
|
"\t};\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tvar client = new HttpClient(socketsHandler);\n",
|
|
|
|
|
"\tvar client = new HttpClient(socketsHandler)\n",
|
|
|
|
|
"\t{\n",
|
|
|
|
|
"\t\tBaseAddress = new Uri(global_api_config.BaseUrl)\n",
|
|
|
|
|
"\t};\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tvar sw = Stopwatch.StartNew();\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tvar tasks = Enumerable.Range(0, 200).Select(i => client.GetAsync(global_queryBaseUrl));\n",
|
|
|
|
|
"\tvar tasks = Enumerable.Range(0, 200).Select(i => client.GetAsync(global_default_page));\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tawait Task.WhenAll(tasks);\n",
|
|
|
|
|
"\n",
|
|
|
|
@ -575,7 +575,7 @@
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 3,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "pwsh"
|
|
|
|
@ -587,16 +587,7 @@
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
" TCP 192.168.1.151:18018 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18019 47.103.77.66:80 ESTABLISHED 32156\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"# 重新查询当前网络状态\n",
|
|
|
|
|
"#!set --value @csharp:global_netstat_filter --name queryFilter\n",
|
|
|
|
@ -612,7 +603,7 @@
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 5,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "csharp"
|
|
|
|
@ -624,30 +615,7 @@
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"开始请求网络...\n",
|
|
|
|
|
"共请求了200次,耗时 11781 毫秒\n",
|
|
|
|
|
"当前网络状态\n",
|
|
|
|
|
" TCP 192.168.1.151:18018 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18019 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18167 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18168 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18169 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18170 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18171 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18172 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18173 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18174 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18175 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
" TCP 192.168.1.151:18176 47.103.77.66:80 ESTABLISHED 32156\n",
|
|
|
|
|
"\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"{ //MaxConnectionsPerServer 设置为10:网络连接将增加到10个,耗时将减少到1/4\n",
|
|
|
|
|
"\tConsole.WriteLine(\"开始请求网络...\");\n",
|
|
|
|
@ -658,11 +626,16 @@
|
|
|
|
|
"\t\tMaxConnectionsPerServer = 10\n",
|
|
|
|
|
"\t};\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tvar client = new HttpClient(socketsHandler);\n",
|
|
|
|
|
"\tvar client = new HttpClient(socketsHandler)\n",
|
|
|
|
|
"\t{\n",
|
|
|
|
|
"\t\tBaseAddress = new Uri(global_api_config.BaseUrl)\n",
|
|
|
|
|
"\t};\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\t//client.Display();\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tvar sw = Stopwatch.StartNew();\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tvar tasks = Enumerable.Range(0, 200).Select(i => client.GetAsync(global_queryBaseUrl));\n",
|
|
|
|
|
"\tvar tasks = Enumerable.Range(0, 200).Select(i => client.GetAsync(global_default_page));\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\tawait Task.WhenAll(tasks);\n",
|
|
|
|
|
"\n",
|
|
|
|
@ -714,7 +687,7 @@
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 6,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "csharp"
|
|
|
|
@ -738,7 +711,7 @@
|
|
|
|
|
" {\n",
|
|
|
|
|
" using (var client = new HttpClient())\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" _ = await client.GetAsync(global_queryBaseUrl);\n",
|
|
|
|
|
" _ = await client.GetAsync (global_api_config.BaseUrl + global_default_page);\n",
|
|
|
|
|
" } \n",
|
|
|
|
|
" Interlocked.Add(ref requestCount, 1);\n",
|
|
|
|
|
" });\n",
|
|
|
|
@ -747,10 +720,12 @@
|
|
|
|
|
"{ //使用长期客户端\n",
|
|
|
|
|
" using (var client = new HttpClient())\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" client.BaseAddress = new Uri(global_api_config.BaseUrl);\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" for(int i=0; i<10; i++)\n",
|
|
|
|
|
" {\n",
|
|
|
|
|
" //n次调用,均使用同一个 HttpClient 实例\n",
|
|
|
|
|
" _ = await client.GetAsync(global_queryBaseUrl);\n",
|
|
|
|
|
" _ = await client.GetAsync(global_default_page);\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
" }// 所有调用完成,才释放 HttpClient 实例\n",
|
|
|
|
|
"}"
|
|
|
|
@ -765,7 +740,7 @@
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 7,
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"dotnet_interactive": {
|
|
|
|
|
"language": "csharp"
|
|
|
|
@ -777,24 +752,7 @@
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"text/html": [
|
|
|
|
|
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Extensions.Http.Resilience, 8.6.0</span></li><li><span>Polly, 8.4.1</span></li></ul></div></div>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"共有227个字符\r\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"#r \"nuget:Polly\"\n",
|
|
|
|
|
"#r \"nuget:Microsoft.Extensions.Http.Resilience\"\n",
|
|
|
|
@ -826,8 +784,9 @@
|
|
|
|
|
" #pragma warning restore EXTEXP0001\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" var httpClient = new HttpClient(resilienceHandler);\n",
|
|
|
|
|
" httpClient.BaseAddress = new Uri(global_api_config.BaseUrl);\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" var response = await httpClient.GetAsync(\"https://www.baidu.com\");\n",
|
|
|
|
|
" var response = await httpClient.GetAsync(global_default_page);\n",
|
|
|
|
|
" var htmlText = await response.Content.ReadAsStringAsync();\n",
|
|
|
|
|
" Console.WriteLine($\"共有{htmlText.Length}个字符\");\n",
|
|
|
|
|
"}\n"
|
|
|
|
|