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

求助visual studio2013怎么设置参考线,以及怎么自定义代码配色