问题标签 [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 投票
1 回答
25103 浏览

.net - System.Net.ServicePointManager.DefaultConnectionLimit 和 .MaxServicePointIdleTime

您什么时候需要调整这两个设置(如下)?这两个数字对于HttpWebRequest我制作的实例意味着什么?

  1. System.Net.ServicePointManager.DefaultConnectionLimit
  2. System.Net.ServicePointManager.MaxServicePointIdleTime

对象是ServicePoint特定于域名还是请求的每个唯一 URI?

0 投票
1 回答
1588 浏览

c# - ServicePointManager.DefaultConnectionLimit 范围

更改 ServicePointManager.DefaultConnectionLimit 是否仅影响当前进程或整个 .NET 平台。请提供来源。

0 投票
1 回答
2262 浏览

c# - ServicePointManager 监控 HTTP 请求

我正在使用一个应用程序,它每分钟向不同的 URI 发送数百个 HTTP 请求。有没有办法监控应用程序创建的连接?我发现 ServicePointManager 非常适合检查特定域,但它需要一个 URI 来缩小范围。 如果ServicePointManager公开当前正在建立的所有连接及其并发连接数的列表,我的问题将得到解决。

我为什么要这样做?我正在尝试诊断有 30 秒完成并返回简单 JSON 的请求的超时异常。(并非每次请求都会发生超时)似乎不应该有超时的原因。也许我的可用连接已经用完了,因为我已经超过了 ServicePointManager 提供的 96 个,这就是我的瓶颈。虽然不太可能,但这是我现在唯一能想到的。建议?

0 投票
1 回答
1693 浏览

c# - ServicePoint 安全检查以防止阻塞新的 HttpWebRequest

我正在使用一个 3rd 方库,它可以进行许多 http 调用。通过反编译代码,我确定它正在创建和使用 raw HttpWebRequest,所有这些都指向一个 URL。问题是某些请求没有正确关闭。一段时间后,HttpWebRequest当库对它们调用 GetRequestStream()* 时,所有 new 都会永远阻塞。我已经确定此阻塞是由于该特定主机的 ServicePoint 上的 ConnectionLimit,其默认值为 2。换句话说,该库已打开 2 个请求,然后尝试打开第 3 个请求,这会阻塞。

我想防止这种阻塞。该库具有相当的弹性,并且会自行重新连接,因此如果我终止它已建立的现有连接也没关系。问题是我无权访问这个库制作的HttpWebRequest任何东西。HttpWebResponse但是我确实知道它访问的 URL,因此我可以访问ServicePoint它。

(注意:在这些 HttpWebRequests 上启用了 KeepAlive)

0 投票
3 回答
3440 浏览

c# - HttpWebResponse 不会针对并发出站请求进行扩展

我有一个用 C# 编写的 ASP.NET 3.5 服务器应用程序。它使用 HttpWebRequest 和 HttpWebResponse 向 REST API 发出出站请求。

我已经设置了一个测试应用程序以在单独的线程上发送这些请求(以模糊地模仿服务器的并发性)。

请注意,这更像是一个 Mono/Environment 问题而不是代码问题;所以请记住,下面的代码不是逐字记录的;只是功能位的剪切/粘贴。

这是一些伪代码:

如果我在 Visual Studio Web 服务器中的本地开发机器(Windows 7)上运行应用程序,我可以增加 numThreads 并接收相同的平均响应时间,而无论是 1 个“用户”还是 100 个,变化最小。

将应用程序发布并部署到 Mono 2.10.2 环境中的 Apache2,响应时间几乎呈线性增长。(即,1 个线程 = 300 毫秒,5 个线程 = 1500 毫秒,10 个线程 = 3000 毫秒)。无论服务器端点(不同的主机名、不同的网络等)如何,都会发生这种情况。

使用 IPTRAF(和其他网络工具),应用程序似乎只打开 1 或 2 个端口来路由所有连接,其余响应必须等待。

我们已经构建了一个类似的 PHP 应用程序并部署在 Mono 中,具有相同的请求并且响应可以适当地扩展。

我已经完成了我能想到的 Mono 和 Apache 的每一个配置设置,并且两个环境之间唯一不同的设置(至少在代码中)是有时 Mono 中的 ServicePoint SupportsPipelining=false,而从我的机器。

似乎由于某种原因在 Mono 中没有更改 ConnectionLimit(默认值为 2),但我在代码和指定主机的 web.config 中将其设置为更高的值。

要么我和我的团队忽略了一些重要的事情,要么这是 Mono 中的某种错误。

0 投票
3 回答
4791 浏览

c# - 如何在不下载内容的情况下执行 GET 请求?

我正在研究链接检查器,通常我可以执行HEAD请求,但是有些网站似乎禁用了这个动词,所以在失败时我还需要执行GET请求(仔细检查链接是否真的死了)

我使用以下代码作为我的链接测试器:

这一切都很好,花花公子。除了当我执行GET请求时,整个有效载荷都会被下载(我在wireshark中看过这个)。

有没有办法配置底层ServicePoint或根本HttpWebRequest不缓冲或急切加载响应体?

(如果我手动编码,我会将 TCP 接收窗口设置得非常低,然后只抓取足够的数据包来获取标头,一旦我有足够的信息就停止响应 TCP 数据包。)

对于那些想知道这意味着什么的人,我不想在获得 404 时下载 40k 404,这样做几十万次在网络上是昂贵的

0 投票
1 回答
2031 浏览

c# - 使用 BindIPEndPointDelegate 指定源端口似乎不起作用

我已经全面搜索了如何使用 BindIPEndPointDelegate 来更改我的 HttpWebRequest 的源端口。我在这方面找到了多个帖子:

这里这里

但是,它似乎对我不起作用。我发现这个人也有同样的问题: Define Outgoing/Calling Port for SOAP Web Service in Visual Studio 2010

基本上,我想在连接到网页时更改我的源端口。BindIPEndPointDelegate 非常简单。

当我使用 netstat -n 查看连接时,我希望将 myipaddress:8086 视为源 IP 和目标 IP:80。我在 netstat 中看到的是它正在使用我指定的端口创建一个环回 (127.0.0.1:8086)。查看netstat -n的屏幕截图

由于这是我的第一篇文章,我无法发布图片。所以图片可以在这里找到

为什么 BindIPEndPointDelegate 创建一个环回连接,如何让我的 WebRequest 表现得像具有我指定端口的浏览器?

我在一个win7 Pro盒子上,没有本地防火墙,没有通过代理。

0 投票
0 回答
105 浏览

httpwebresponse - ServicePoint、HttpConnectionHttp 1.1、httppipelining、Responons、stream.close 内部结构?

在 .net framework 3.5 中,使用 http 1.1 即持久连接,并且默认启用流水线。您能否让我知道有必要通过调用 httpresponse.close 或 stream.close 方法来关闭流或连接以释放对同一 Internet 资源的另一个 http 请求的连接?我的理解是即使 httpresponse.close 或 stream.close 没有被调用,那么 httpconnection 即服务点应该能够为另一个并发请求提供服务。请确认。

0 投票
1 回答
3333 浏览

c# - 当客户端连接到“localhost”上的服务时,为什么 System.Net.ServicePoint.ConnectionLimit 使用“7FFFFFFF”(Int32.MaxValue/2147483647)?

为什么当客户端连接到'localhost'上的服务时System.Net.ServicePoint.ConnectionLimit 使用'7FFFFFFF' (Int32.MaxValue/2147483647),而如果服务在远程计算机上运行,​​它决定使用 '2' 作为默认值?

最初我认为如果 servicepoint.connectionlimit 未设置,它将是 ServicePointManager.DefaultConnectionLimit。但是,我刚刚意识到(一旦我从客户那里得到问题),它的 Int32.MaxValue/2147483647。

我已经做了一些研究(详情请参阅下面的链接),但是我找不到它为什么用于 int32.maxvalue。我可以推测它可能是为了更好的性能,因为输入请求和响应消息不会跨越边界。

我的问题:

  1. 如果服务在'localhost'上运行,为什么选择 Int32.MaxValue ?(任何英文解释;)我从反射器复制的代码片段也很棒 - 正如我推测的意图 - 但不完全理解代码:))
  2. 我理解它的性能——但从“2”(默认)到“int32.maxvalue”对我来说听起来很延伸。换句话说,只要请求不通过网络,为什么可以打开尽可能多的 TCP 连接。(换句话说 - 为什么默认为 int32.maxvalue - 它没有副作用)

一些与此相关的有用链接:

在 httpwebrequest 中如何以及在何处创建 TCP 连接,它与 servicepoint 有什么关系?

http://blogs.microsoft.co.il/idof/2011/06/20/servicepointmanagerdefaultconnectionlimit-2-depends/

http://msdn.microsoft.com/en-us/library/system.net.servicepoint.connectionlimit(v=vs.110).aspx

http://arnosoftwaredev.blogspot.com/2006/09/net-20-httpwebrequestkeepalive-and.html

来自反射器的代码片段

问候,

0 投票
1 回答
3842 浏览

.net - 在 WebException 之后避免 ProtocolViolationException

我正在解决这个错误:
https ://github.com/openstacknetsdk/openstack.net/issues/333

该问题涉及ProtocolViolationException以下消息:

HTTP/1.0 协议不支持分块编码上传。

我发现我能够可靠地重现问题,我发出一个产生 502 响应代码的 Web 请求,然后调用使用带有分块编码的 POST 请求。我将此追溯到具有502 响应之后ServicePoint.HttpBehaviour的值的属性。HttpBehaviour.HTTP10

我能够使用以下技巧(在catch块中)解决问题。此代码“隐藏”ServicePoint由失败请求创建的实例ServicePointManager,强制它ServicePoint为下一个请求创建一个新实例。

问题:

  1. 为什么我要观察这种行为?
  2. 解决问题的非hacky方法是什么?