问题标签 [servicepointmanager]

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 投票
0 回答
72 浏览

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

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

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

0 投票
1 回答
181 浏览

c# - ChannelFactory:Channel Close() 未关闭连接(netstat 显示 ESTABLISHED)

我有一个与 WCF 服务器通信的 WPF 应用程序。

我正在使用一个 ChannelFactory 为每个呼叫创建通道:

启动应用程序时对服务器有很多请求,在某些时候它会停止并且我得到超时。查看 netstat 我看到了一些与服务器的 ESTABLISHED 连接,

当我将 ServicePointManager.DefaultConnectionLimit 更改为 10 时,我可以处理对服务器的更多调用,但一段时间后它仍然会因超时异常而停止。

将 ServicePointManager.DefaultConnectionLimit 设置为 int.MaxValue 会处理我的所有请求,但我有大约 720 个与服务器的 ESTABLISHED 连接(服务器上的 netstat 给了我相同的结果)。

我在这里对两件事感到困惑:

  1. 看起来 WCF 不是池连接,而是为每个请求创建一个新连接
  2. 即使在我关闭频道后,连接似乎仍然建立。

我还检查了 ServicePointManager.FindServicePoint(new Uri(" https://server:3000 ")); 它确认 CurrentConnections 处于我设置为 ServicePointManager.DefaultConnectionLimit 的限制。

我已将 ServicePointManager.MaxServicePointIdleTime 减少到 500,这可以更快地关闭连接,但它仍然为我进行的每个调用创建一个连接。

在与我的服务器通信时,如何说服通道工厂重用现有通道。

这是我的绑定:

0 投票
0 回答
23 浏览

c# - Excel 所针对的 .net 版本 - TLS 问题

我有一个使用目标框架 4.6.1 构建的 C# dll,我在 Excel 插件和可执行文件中使用它(也使用目标框架 4.6.1 构建)。

我没有在我的 dll 中指定 ServicePointManager.SecurityProtocol,因此它可以根据 Microsoft 的建议使用操作系统支持的最高版本。

但是当我通过 Excel 加载项运行 dll 时检查 ServicePointManager.SecurityProtocol 时,它被设置为Ssl3|Tls

当我在 exe 中运行相同的 dll 时,ServicePointManager.SecurityProtocol 是Tls|Tls11|Tls12|Tls13

我在同一台机器上看到了这种行为。

我知道对安全协议的支持因框架的版本而异。

希望能帮助您理解行为。我试图避免在我的 DLL 中对 Tls 版本进行硬编码。

谢谢

0 投票
1 回答
169 浏览

c# - 使用 Microsoft.Owin 验证 SSL 证书

我想警告用户有关使用不安全证书的 TLS 连接到与此类似的 Microsoft.Owin 自托管应用程序(释义)。

在这种情况下从不使用 ServerCertificateValidationCallback,所以这不起作用:

如何对 Microsoft.Owin 应用程序的连接进行证书验证?

0 投票
1 回答
82 浏览

c# - webClient - servicepointmanager 冻结我的项目 - C#

我使用“ServicePointManager”来解决“请求被中止:无法创建 SSL/TLS 安全通道”的问题。

但我的项目冻结/挂起。有人能帮我吗?

0 投票
1 回答
359 浏览

asp.net - 为什么这个后面的异常在 MySql.Data.MySqlClient.MySqlConnection.Open() 中发生“System.IO.IOException”?

堆栈跟踪详细信息:

我得到了这个后面的异常,但在每 1000 个请求中肯定会出现大约 1 或 2 次。尽管我尝试以不同的方式解决这个问题,但除了两难之外,找不到任何解决方案。

我经历了类似于我的例外的这个问题,但还没有解决方案。我也发现了这个问题,但现在陷入困境,我的例外的解决方案是什么。我试图在 Global.asax.cs/Application_BeginRequest() 方法中写下这段代码:

注意:我的应用程序的目标.NET 框架版本是4.7,我必须在我的应用程序代码中修复这个异常。我没有权利在服务器上工作。所以,如果我的方法正确,请帮助我。另外,请确保这行代码是否与我的异常有关。如果这是正确的,我应该在上面的代码行中使用按位速记运算符 '|=' 代替 '=' 吗?

提前致谢。

更新: 在代码块底部添加了完整的堆栈跟踪和异常详细信息,一些人要求帮助理解。请注意,james-mead的答案还不起作用。我想请教更多专家的答案,以摆脱这个异常。我真的被困在这一点上。

0 投票
0 回答
87 浏览

c# - Schannel 协议注册表设置覆盖 ServicePointManager.SecurityProtocol 值?

我正在创建一个 WCF 应用程序,在其中我将 ServicePointManager.SecurityProtocol 设置为接受 TLS1.2。我还将创建此处概述的 SChannel 服务注册表项,以禁用除 TLS1.2 之外的所有客户端/服务器协议(将设置为 Enabled = 0)。

我了解 SChannel 设置会创建操作系统级别设置。我想知道是否在我的代码中明确设置 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 它会覆盖操作系统设置并允许 TLS1.1 连接?

由于这里的陈述,我感到困惑 - 如果您想使用注册表配置安全性,请不要在代码中指定安全协议值;这样做会覆盖注册表设置。

此更新不会更改手动设置安全协议而不是传递默认标志的应用程序的行为。

编辑 1:我正在使用 .Net v4.7。

0 投票
0 回答
78 浏览

c# - 打开认证验证会导致 Application Insights 数据丢失吗?

我们正在使用 Microsoft Application Insights 来记录遥测数据。突然间,它已停止为大多数用户记录数据。我们从 WPF 应用程序进行日志记录。我们怀疑打开 ServicePointManager.ServerCertificateValidationCallback 导致了这个问题。这是回调的代码 -

根据配置值,我们附加回调,否则我们将其设置为 null。这是我们如何获得ServicePointManager.ServerCertificateValidationCallback值 -

每次我们使用 HttpClient 发出异步请求时,都会执行上述代码块。

代码有什么问题吗?Application Insights SDK 是否保留任何可用于调查数据丢失的日志?我查看了 %localappdata%/Microsoft/ApplicationInsights 文件夹 - 它只包含空文件夹。关于如何解决此问题的任何想法?

0 投票
0 回答
99 浏览

.net - 端口耗尽 - ServicePointManager.ReusePort 和 IHttpClientFactory

在我们的服务中,我们收到System.Net.Sockets.SocketException了消息Only one usage of each socket address (protocol/network address/port) is normally permitted xx.xxx.xx.xxx:443。这表明机器上所有可用的网络端口都已用尽。

用例是对具有不同输入的同一端点进行大量 HTTP 调用,并且每次使用 IHttpClientFactory (DefaultHttpClientFactory) 创建 HttpClient。HttpClient 和 HttpResponseMessage 都包含在“使用”语句中以进行正确处理。

问题:

  1. 使用 IHttpClientFactory 创建过多的 HttpClient 对象并进行处理可以吗?
  2. 鉴于我们使用的是避免资源耗尽问题的 IHttpClientFactory,是否有助于将 ServicePointManager.ReusePort 设置为 true 以减少此 SocketException?
0 投票
1 回答
123 浏览

windows-runtime - 在 WinRT 应用程序中,如何使用 TLS1.2 进行连接?

我有一个 Windows Store 应用程序,它是一个 WinRT 电话/桌面应用程序(即不是 UWP 应用程序),面向 Windows 8.1 及更高版本。

它已经在商店上架了好几年了,但最近它不再能够使用 HTTPS 连接各种 Web API 和网站(YouTube,以及我自己的网站)。

我也有这个应用程序的 WPF 版本,最近该应用程序也发生了这种情况,为了修复它,我使用了System.Net.ServicePointManager. 不幸的是,在我的 WinRT 环境中,System.Net不包括ServicePointManager. 在我的 WPF 应用程序中,我这样做了,并且效果很好:

在围绕 Internet 进行一些研究时,似乎 .NET 4.6 应该包含 .NET ServicePointManager,但我没有看到任何方法可以在 WinRT 开发环境中更改(甚至看到)我的 .NET 版本。

我又看了一些,发现 aStreamSocket可以用来连接 TLS1.2 ......但这似乎主要是为了启用蓝牙通信或与 Web 端点的通信,但只能通过主机名......这对我来说是不够的。我需要连接到一个实际的网站,而不仅仅是基础级域。

尝试这个,我做了以下事情:

如有必要,我可以包含代码ReadDataFromSocket(),但它似乎可以正常工作,当我将其指向https://google.com时,它可以按预期从套接字读取数据。但是,我似乎无法弄清楚如何将套接字指向任何有用的东西。inadaydevelopment.com 的主页不是我想要的;我希望使用托管在该服务器上的 Web API,但似乎找不到这样做的方法。

由于该ConnectAsync()方法的第一个参数是 just HostName,因此第二个参数 ( remoteServiceName) 必须是连接到我尝试连接的实际 API 或网页的方式。根据文档,也就是说,除了各种数值The service name or TCP port number of the remote network destination... 之外,我没有看到此参数的任何示例值,这https两者都不会让我访问我尝试连接的 API 端点或网页。

所以,有了那个超长的序言,我的问题归结为

有没有办法让我System.Net.ServicePointManager像在 WPF 应用程序中一样在我的 WinRT 应用程序中使用?如果是这样,怎么做?

如果没有,我该如何StreamSocket连接到我想连接的确切的 Web 服务或网页,而不仅仅是顶级主机?

如果这不可行,我还可以通过哪些其他方式使用 TLS1.2 消费 Web 内容?

提前感谢您的任何帮助或建议。