问题标签 [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 回答
1323 浏览

c# - 为什么服务器会强制关闭连接?它对客户有什么期望?

在尝试从我在手持设备上运行的应用程序在本地网络上运行的服务器应用程序上调用 REST 方法时,它失败并显示“无法为 SSL/TLS 建立安全通道 ...System.Net.Sockets.SocketException: An现有连接被远程主机强行关闭”。

在 .NET 的更新/全功能版本中,您可以将此代码添加到客户端:

...如图所示接受服务器的响应。不过,这在我的 Windows CE / Compact Framework 应用程序中对我不可用 - 尽管 ServicePointManager 是“已知数量”,但 ServerCertificateValidationCallback 不是。这显然是 Windows.NET 程序集的一部分,我在这个项目中不可用。

所以,假设仍然有办法完成同样的事情(接受 ssl 化服务器的响应),在这种情况下如何做到这一点?

一种建议的解决方法是向我的客户添加一个类,如下所示:

...然后在应用程序启动时调用它(例如在主窗体的 Load() 事件中):

...但我的日志文件中仍然出现此异常:

顺便说一句,TrustAllCertificatesPolicy 的(空)构造函数可能没有实际意义,因为它是灰色的。

服务器对客户端的期望究竟是什么?为什么服务器会强制关闭连接?

更新

在尝试确定客户端代码或服务器代码是否存在问题时,我尝试通过 Postman 访问 URL,但得到以下信息:

在此处输入图像描述

因此,我按照“在 Chrome 中导入 SSL 证书”链接查看是否有帮助。

[ http://blog.getpostman.com/index.php/2014/01/28/using-self-signed-certificates-with-postman/]告诉我:

原来有一个更好的解决方案可以解决这个问题,而且它也避免了每次启动浏览器时给 Chrome 添加异常。这就是你的做法:

但是,在进入https://localhostChrome 时,我得到“此网页不可用”

尝试http://localhost代替(“http”而不是“https”),OTOH,我得到了一个“IIS7”图像,在一系列(人类)语言中带有“欢迎”。

至于第 2 步(“单击 URL 栏左上角的锁定图标。”),我在那里看不到这样的东西;这就是我所看到的:

在此处输入图像描述

那么我注定要失败了吗?

0 投票
1 回答
258 浏览

web-services - PSH Runspaces + New-WebServiceProxy = 2 连接限制?

我需要一个调用内部 Web 服务的高性能脚本。因此,我编写了一个 powershell 脚本来创建运行空间线程,每个线程都向一个公共 Web 服务代理对象 (New-WebServiceProxy) 发出请求。

我发现无论我创建的线程数量和 Web 服务应用程序池工作进程的数量如何,我都只能从运行脚本的计算机同时建立 2 个 HTTP 连接,因此 Web 服务中只发生了两个进程。这并没有给我足够快的结果。

通过在多台客户端计算机上运行我的脚本,我可以在对 Web 服务器施加压力之前将我的工作进程提高到 8 个。我需要使用一个 powershell 脚本在代码中到达那里。

我尝试将此注册表项设置为 8:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\MaxConnectionsPerProxy

这看起来确实可能提高了我的脚本的性能,但我仍然只看到 2 个与 Web 服务的 HTTP 连接。

似乎真正的解决方案是管理这个 .Net 属性:

https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx

有人可以向我解释如何在 powershell 中处理这个问题吗?我无法弄清楚 New-WebServiceProxy 返回的对象与 ServicePoint 类之间的任何联系?那么在 Powershell 中设置什么来改变这 2 个连接限制呢?

0 投票
0 回答
281 浏览

c# - 在 ServicePoint 上永久设置属性的正确方法

我想在特定连接上关闭 Nagle 算法(在我的情况下 - 到 ElasticSearch 服务器)。

我的代码目前看起来像这样:

问题是ServicePoint对象在一段时间后被回收,这导致它丢失了设置。因此,我不能只在系统启动时运行此代码一次。看来我面前有几个选择:

  1. 全局关闭 Nagle 算法(因此,影响我不想影响的连接)。
  2. 增加MaxServicePointIdleTime,以便ServicePoint永远不会被回收(可能是个坏主意?我的直觉告诉我)。
  3. 设置某种计时器,每 N 秒重置一次属性,其中 N 小于 a 的回收时间ServicePoint
  4. 每次使用连接时重置属性。

我真的不喜欢这些选项中的任何一个,它们要么会影响系统中的其他东西,要么对于我想做的事情来说似乎太复杂了(比如计时器选项)。在我看来,应该有一个简单的解决方案。想法?

0 投票
0 回答
47 浏览

c# - 检测 HttpWebRequest 的真正开始

我是一个使用.TAP 模式API编写的网络爬虫HttpWebRequest

我想从中下载一些东西,http://somedomain.tld但我最终可能会发送相当多的请求。我不知道是否somedomain.tld会及时回复,我希望每个请求不超过 10 秒以完成发回回复。我还想利用ServicePoint该域强制执行的连接限制。

所以我需要能够根据请求超时。通常,我会从 a 获得取消令牌CancellationTokenSource

并将其提供给我的异步操作,也许还注册一个调用的取消回调myWebRequest.Abort(),所以我最终得到一个看起来像这样的(简化)方法:

到目前为止,一切都很好。

让我稍微限制一下:

现在,ServicePoint关联的实例somedomain.tld一次只允许一个请求。

现在我同时发出两个请求,安全地知道这ServicePoint将使目标域免受我的滥用:

现在,让我们假设第一个请求需要超过 10 秒才能完成......因为我已经限制ServicePoint一次只触发一个请求,ServicePoint当轮到触发第二个请求时,它已经被取消并且中止。

那么我怎么知道请求实际上是什么时候发送的呢?如何设置“知道”ServicePoint与特定请求有关的操作的超时?

0 投票
0 回答
194 浏览

.net - 使用 TLS 1.1 和 1.2 的 PayPal IPN 无法通过 Server 2008 SP2

这是我的代码

这是我得到的错误(第 47 行是上面代码中的最后一个)

我在服务器上安装了 .net 4.5,并且正在使用 VB(我知道)我尝试过使用我在此处找到的 .net 4.5 的另一个 SecurityProtocol 字符串,但这也不起作用我已经翻译了上面的 4.0 一个C# 但不确定它是否正确。我应该说这在没有 ServicePointManager 行的情况下在 2015 年 12 月运行良好这是我尝试过的 .net 4.5 行

0 投票
0 回答
957 浏览

c# - 如何检测哪个安全协议 (SSL/TLS) 将用于 REST Web 服务调用?

我正在开发一个 winform 应用程序,在该应用程序中调用 REST Web 服务。对于基于 http 的 Web 服务器,它工作正常。但是,当它用于基于 https 的服务器时,他们收到了一个异常The request was aborted: Could not create SSL/TLS secure channel.显然,这是因为他们使用的是 TLS v1.2 而我没有指定要使用哪个版本的协议在网络服务调用期间使用。而且,当我在互联网上搜索时发现添加以下代码就可以完成这项工作。

但是如果其他一些服务器使用不同版本的安全协议怎么办。我如何使代码健壮,以便它检测到正在使用的协议,然后相应地设置配置?

0 投票
0 回答
815 浏览

c# - System.ComponentModel.Win32Exception:客户端和服务器无法通信,因为它们没有通用算法

我试图读取从 url 返回的数据。考虑以下代码:

我被抛出了一个异常:

System.Net.WebException:基础连接已关闭:接收时发生意外错误。---> System.ComponentModel.Win32Exception: 客户端和服务器无法通信,因为它们没有共同的算法

在以下代码上:

我已经通过浏览器直接访问 _targetUrl 进行了验证,其中代理设置为与代码中定义的代理相同,并且绝对能够看到浏览器上返回的数据。

我通过从四处搜索的参考资料中获取零碎的代码来编写上面的代码。我发现的大多数建议似乎与我现在使用的几乎相同。

这里有点失落。有人能指出我正确的方向吗?

谢谢你们的关注。

0 投票
1 回答
1040 浏览

c# - 实现特定于客户端的 WCF ServicePointManager ServerCertificateValidationCallback?

ServicePointManager.ServerCertificateValidationCallback 允许自定义验证服务端证书。

当只有一个自定义验证器时,这可以正常工作。但是我有多个客户端,我需要能够为每个客户端指定不同的验证器。

现在,据我所知,所有 ClientBase 对象只有一个 ServicePointManager,因此,默认情况下,所有客户端都将通过相同的服务端证书验证链。

如果必须,我想可以:

  1. 将所有验证器挂钩到链中,然后为每个验证器添加逻辑以了解何时验证以及何时简单地返回 true

  2. 维护一组验证器(啊!)并适当地调用

我希望避免这两种情况...... WCF 中是否有一些可扩展的组件支持多个 ServicePointManagers?

帮助!欢迎任何建议或指点!

0 投票
1 回答
1784 浏览

c# - 我们可以在 ServicePointManager.SecurityProtocol 中添加四个协议吗?

我想支持从 ssl3 到 tls 1.2 的所有安全协议。但是在网上搜索时,我发现代码为

或作为

但是,我想支持所有协议。那么,写为

我写上面的代码时没有给我任何编译错误。那么,这会导致什么问题吗?

0 投票
1 回答
1192 浏览

c# - Servicepointmanager 设置 sercurityprotocol 异常

在我的应用程序中,我想检查客户端支持的安全协议。我有最新的 .Net 版本。

我的想法是将 SecurityProtocol 设置为 SecurityProtocolType Tls1.2,例如:

我的问题是,如果客户端不支持 TLS1.2,ServicePointManager(SecurityProtocol) 是否会抛出此版本不受支持的异常?