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 个连接限制呢?

4

1 回答 1

1

我认为您只需要在脚本中将默认连接限制设置为更大的值,例如:

[System.Net.ServicePointManager]::DefaultConnectionLimit = 8

和生成类之间的联系ServicePointManager是生成类继承自SoapHttpClientProtocol内部用于System.Net.HttpWebRequest进行网络调用的类。在内部,HttpWebRequest使用ServicePointServicePointManager控制您可以同时进行的飞行中呼叫的数量。

于 2015-05-16T00:56:57.067 回答