Visual Studio 2013 WebTest 请求失败:现有连接被远程主机强行关闭
Posted
技术标签:
【中文标题】Visual Studio 2013 WebTest 请求失败:现有连接被远程主机强行关闭【英文标题】:Visual Studio 2013 WebTest Request Failed: An existing connection was forcibly closed by the remote host 【发布时间】:2016-11-29 16:16:11 【问题描述】:我正在尝试在我的本地计算机上运行 Visual Studio 2013 Web 测试。这是我成功运行的测试(最后一次大约是 2 个月前)。 Web 测试的第一步是对登录页面的 GET 请求。它看起来像这样:
获取https://example.com/Login.aspx
当我在网络浏览器中输入这个 url 时,它会成功。此外,我可以成功记录一个网络测试,我只需导航到此页面并登录。但是当我尝试重新运行我刚刚记录的网络测试时,我得到了对 GET 请求的响应:
Request failed: An existing connection was forcibly closed by the remote host
IIS 不会在 example.com 上记录任何内容(IIS 不会记录 GET 请求)。但是,当我手动登录或记录 Web 测试时,IIS 确实会正确记录 GET 请求。
example.com 或我的本地主机上的事件查看器中没有记录任何消息。
非常感谢有关如何调试此问题的任何建议。
【问题讨论】:
面临同样的问题。你找到解决办法了吗? 我不确定我是否记错了,但我相信问题是我们的 IT 部门在内部将我们的测试代理移动到了不同的域,这破坏了网络测试的运行(因为它使用了代理),但没有中断记录网络测试或手动点击页面。 【参考方案1】:对我来说,问题在于 TLS 握手。通过添加插件到web测试解决。
Think 是原始问题,对我有帮助:https://social.msdn.microsoft.com/Forums/vstudio/en-US/bc3ebf23-575d-4e54-bd6b-a1ed87fe5213/web-performance-test-is-not-working-with-tls12-enabled?forum=vstest
插件来源:
using System;
using System.ComponentModel;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using Microsoft.VisualStudio.TestTools.WebTesting;
[Description("This plugin will force the underlying System.Net ServicePointManager to negotiate downlevel SSLv3 instead of TLS. WARNING: The servers X509 Certificate will be ignored as part of this process, so verify that you are testing the correct system.")]
public class TLSPlugin : WebTestPlugin
[Description("Enable or Disable the plugin functionality")]
[DefaultValue(true)]
public bool Enabled get; set;
public override void PreWebTest(object sender, PreWebTestEventArgs e)
base.PreWebTest(sender, e);
//For TLS
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//For SSL
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
//we wire up the callback so we can override behavior and force it to accept the cert
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCB;
//let them know we made changes to the service point manager
e.WebTest.AddCommentToResult(this.ToString() + " has made the following modification-> ServicePointManager.SecurityProtocol set to use SSLv3 in WebTest Plugin.");
public static bool RemoteCertificateValidationCB(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
//If it is really important, validate the certificate issuer here.
//this will accept any certificate
return true;
【讨论】:
【参考方案2】:今天我在使用 Visual Studio 2017 Enterprise 时遇到了类似的问题,几个小时后,我能够解决它。 我在安装了 Visual Studio 的机器中添加了以下两个注册表项,它解决了这个问题。 有关设置的完整描述,请参阅文档:- https://support.microsoft.com/en-in/help/4040243/how-to-enable-tls-1-2-for-configuration-manager
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001
SchUseStrongCrypto 键的两个条目需要在注册表中完成,就像下面的快照一样。
【讨论】:
【参考方案3】:Visual Studio 2019 - 负载测试
场景:使用单元测试进行负载测试。 问题:手动运行单元测试时,它运行没有问题。一旦负载测试开始,它就会失败并出现同样的错误:“现有连接被远程主机强行关闭”。 解决方案:初始化单元测试时强制使用 TLS1.2。[TestInitialize] public void Init() ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
【讨论】:
以上是关于Visual Studio 2013 WebTest 请求失败:现有连接被远程主机强行关闭的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013
Visual Studio 2013 Tools for Unity安装目录,Visual Studio 2013 Tools.unitypackage
使用Visual Studio2013打开Visual Studio2015项目
从 Visual Studio 2013 转换到 Visual Studio 2015 的问题
Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015