问题标签 [servicepoint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6697 浏览

c# - 使用 HttpClient 检查服务器证书

我正在重写 WinForms 中的一些 Web 处理代码,并从 HttpWebRequest 切换到 HttpClient。我要求的最后一件事是我似乎无法找到如何完成。

在 HttpWebRequest 中,我可以从要连接的 Web 服务器捕获证书并显示它:

我找不到使用 HttpClient 捕获证书的等效方法:

我在这里如何/在哪里可以做到这一点?我不知道如何到达 ServicePoint.Certificate。

0 投票
1 回答
918 浏览

.net - CurrentConnections 超过 ServicePoint 中的 ConnectionLimit

我有一个带有多个节点的集群/服务器来处理来自应用程序的请求。

用户正在运行的应用程序打开 2 个具有以下 URL 的 Web 客户端:

为了支持粘性(我希望 2 个 Web 客户端中的每一个都保持与节点的连接 - 持久性),ConnectionLeaseTimeout保持默认值,这意味着“不要关闭连接”并且因为DefaultPersistentConnectionLimit为 2默认情况下,我将DefaultConnectionLimit设置为 1。

问题:

  1. servicePoint.CurrentConnections 是 2,尽管 servicePoint.ConnectionLimit 是 1。

  2. 在服务器中,我看到远程主机端口正在改变,即我看到超过 2 个端口(每个客户端超过 1 个端口)。

我究竟做错了什么?

我的课堂输出:

CommunicationWebClient https://myprocess.myapp.com/api/json/v1

CommunicationWebClient https://myprocess.myapp.com/api/protobuf/v1

SendAsync _uri= https://myprocess.myapp.com/api/json/v1 servicePoint.Address= https://myprocess.myapp.com/api/json/v1 servicePoint.ConnectionLimit=1 servicePoint.CurrentConnections=2

...

SendAsync _uri= https://myprocess.myapp.com/api/protobuf/v1 servicePoint.Address= https://myprocess.myapp.com/api/json/v1 servicePoint.ConnectionLimit=1 servicePoint.CurrentConnections=2

...

0 投票
3 回答
3148 浏览

azure - 我应该如何在 ASP.NET Core 2.0 API 中使用 HttpClient

我正在开发 ASP.NET Core 2.0 API,我的 API 需要调用另一个第三方 REST API 来上传和检索文件并获取文件列表和状态信息。我将在 Azure 中托管 API,并计划在我的暂存槽和生产槽之间进行蓝绿部署。

似乎最佳实践的普遍共识是通过 Startup.cs->ConfigureServices 方法中的 DI 注册设置 HTTPClient 的 Singleton 实例,以提高性能并避免在我新建 dispose 时可能发生的套接字错误通过 Using 语句与每次使用的 HTTPClient 连接。这在以下链接中有所说明;

https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx#Anchor_5

http://www.nimaara.com/2016/11/01/beware-of-the-net-httpclient/

但是,如果我这样做了,那么当我在 Azure 中进行蓝绿部署时,我可能会遇到单例实例不会看到任何 DNS 更改的问题。这在以下链接中有所说明;

http://byterot.blogspot.co.uk/2016/07/singleton-httpclient-dns.html

https://github.com/dotnet/corefx/issues/11224

http://www.nimaara.com/2016/11/01/beware-of-the-net-httpclient/

所以.. 现在的普遍共识是使用静态 HTTPClient 实例,但控制 ServicePoint 类的 ConnectionLeaseTimeout 值,将其设置为更短的值,这将强制关闭连接以刷新 DNS。这篇博文甚至谈到了 nuget 包(Easy.Common by Nima)中一个不错的 RestClient 组件,它可以正确处理 ConnectionLeaseTimeout 以及缓存的 DNS 值。

但是,似乎 ASP.NET Core 2.0 并没有完全实现 ServicePoint,因此目前 ASP.Net Core 2.0 并不真正支持这种方法。

谁能建议我在 Azure 上运行的 ASP.NET Core 2.0 API 中使用 HttpClient 的正确方法?我希望能够进行蓝绿部署。那么,我是否应该只求助于 Using 语句并在每次使用时更新客户端并遭受性能损失?

似乎必须有一个可靠且高性能的解决方案来满足这一常见需求。

0 投票
0 回答
854 浏览

c# - HttpWebRequest.ServicePoint 与 ServicePointManager.FindServicePoint 不同

我有一台具有三个不同网络接口的计算机。我尝试通过其中一种设备发送 JSON 请求。但由于某种原因,the ServicePointof theWebRequest总是错误的。

电脑 IP1:10.43.130.122

电脑 IP2:192.168.2.3

电脑 IP3:10.43.140.33

目标 IP:10.43.130.152

网络中还有其他三台 PC。所有这些都具有三个网络接口,都在相同的 IP 范围内。在所有其他三个上,ServicePoint设置正确并且 JSON 请求有效。

这是我的代码。sp、sp2 和 sp3 只是调试代码。sp 和 sp2 是正确的(目标 ip),但 sp3 总是错误的。它始终是 192.168.25..9:8919。但是,一旦我知道该WebRequest对象ServicePointServicePointManager. 那么这怎么可能呢?

0 投票
0 回答
278 浏览

c# - 将 Web 请求绑定到特定的网络适配器

背景

我有一个带有 2 个网络适配器的移动嵌入式设备(Ubuntu/Mono)。一种是WiFi,另一种是GSM。要求是当 WiFi 适配器连接到互联网时(在预定 AP 范围内),应用程序通过 WiFi 上传数据(HTTPS POST),但当 WiFi 不可用但 GSM 可用时,它通过 GSM 链接上传数据。

测试

为了实现这一点,我创建了一个基于云的 Web 服务,如果您向它发出 HTTP GET,它会返回 OK。这个想法是让一个线程定期发出绑定到特定适配器的 GET 请求并检查结果。OK 结果表示适配器已连接到 Internet,而超时通常表示未连接。然后我可以使用它来确定用于请求的适配器。

我创建了一个小型测试应用程序,该应用程序启动一个线程,该线程发出绑定到特定适配器的 GET 请求。我使用 request.BindIPEndPointDelegate 将请求绑定到适配器。当我在 WiFi 适配器上运行应用程序时,结果符合预期。WiFi AP开启时,请求返回OK,AP关闭时,请求超时。当我在 GSM 适配器上运行应用程序时也是如此。

但是,当我更新应用程序以启动 2 个线程,一个用于 WiFi 适配器和 GSM 适配器时,就会出现问题。当 AP 开启时,WiFi 和 GSM 请求正常通过。当我关闭 AP 时,WiFi 请求最初会超时,但一段时间后返回成功结果,这是错误的。因为两个线程的 URI 是相同的,我怀疑 ServicePointManager 向两个线程返回相同的 ServicePoint,并且由于多线程,这会变得混乱。

下一个测试是创建 2 个不同的端点。WiFi 和 GSM 请求各一个,希望 ServicePointManager 总是返回不同的 ServicePoint。不幸的是,这并没有产生积极的影响。

我会很感激建议。

代码如下:

0 投票
2 回答
666 浏览

c# - .NET ServicePoint 对象生命周期

ServicePoint.ConnectionLeaseTimeout当我的 Web API 启动时,我一直在设置该属性,以便使用ServicePointManager.FindServicePoint. 但是,我发现在为 ServicePoint 使用 HTTP 连接后的某个时间,ServicePoint.ConnectionLeaseTimeout它已从我的设置值更改为默认值 -1。我绝对没有ServicePoint.ConnectionLeaseTimeout在我的代码中的任何地方将 -1 设置为 -1,而我配置的其他服务点(尚未用于任何连接)仍处于配置值。因此,我必须假设我最初配置的 ServicePoint 已被处置并替换为ServicePoint.ConnectionLeaseTimeout属性具有默认值的新 ServicePoint 对象。

我知道超过时可以删除ServicePoints ServicePointManager.MaxServicePoints,但在我的应用程序ServicePointManager.MaxServicePoints中设置为0(无限制)。我也知道 ServicePoint 可能会在ServicePointManager.MaxServicePointIdleTime超出后被处置,但我将其设置为 int.MaxValue (~25 天)并且那个时间肯定没有过去。

有没有人知道如何管理 ServicePoint 的生命周期以及如何更好地管理 ServicePoint 的配置(特别是 ConnectionLeaseTimeout),而无需在应用程序启动时简单地找到 ServicePoint 并设置一次?

0 投票
1 回答
114 浏览

c# - ServicePointManager.FindServicePoint 块

我正在调用这个方法:

获取服务点,但是当没有可用的互联网连接时,该方法不会返回。

关于如何防止这种情况或设置超时的任何想法?

0 投票
0 回答
81 浏览

c# - ServicePoint 配置 - 应用程序缺乏 http 连接?

我有两个在 IIS 上运行的 C# asp.net 应用程序:主应用程序创建多达 80 个线程,其中每个线程将以大约 3 秒的频率建立到特定端点(所有相同端点 (LAN))的 http 连接。该端点托管在本地主机上(例如本地主机:4510)。该端点是代表“驱动程序”的第二个应用程序,它将最终与 LAN 内的设备建立连接。因此,完全有可能有 80 个线程同时尝试向驱动程序/设备发出请求。

随着时间的推移,该应用程序似乎在涉及 httpclients 的任何事情上都有问题。RavenDB、Elasticsearch 以及 80 个线程。我读了一些关于 ServicePointManager 类的东西;特别是 DefaultConnectionLimit 和 MaxServicePoints 以及如何影响 http 吞吐量。我对底层机制只有基本的了解,所以我想问一下我是否应该专注于特定主题,或者我想要检查的内容可能会提高 http 吞吐量。

更新: 在当前配置下,CPU 负载很低,内存消耗也很低。以下代码显示了 80 个 httpclients 如何连接到 localhost:4510 上的驱动程序:

ConnectionLimit 在调试时显示 Int.Max 但我在解决方案中找不到任何配置?

0 投票
0 回答
72 浏览

.net-core - ServicePoint 中的 CurrentConnections 返回零

我试图在 ServicePoint 对象中查看 CurrentConnections 属性,但即使我使用任何公共 URI,它总是为我返回零;我正在使用 .NET Core。如果我遗漏了什么,有人可以告诉我吗?

这是我的测试用例的片段:

0 投票
1 回答
76 浏览

asp.net-mvc - 无法在 ASP.NET 中使用 SmtpClient 发送电子邮件

我想在 ASP.NET MVC 网站上发送电子邮件,但它不起作用。

我认为问题在于这个例外

“client.ServicePoint.Address”引发了类型为 System.Uri {System.NotSupportedException} 的“System.NotSupportedException”类型的异常。

在代码之后

在本文档https://docs.microsoft.com/en-us/dotnet/api/system.net.servicepoint.address?view=netcore-3.1中,它说异常是由于“ServicePoint 处于主机模式。 " 我不知道。

谁能解释一下并告诉我如何解决?

谢谢,