来自www.example.com的WebClientAsp.net给出“远程主机强制关闭了现有连接”错误

tmb3ates  于 2022-11-26  发布在  .NET
关注(0)|答案(5)|浏览(347)

我正在尝试发布到我们的星号框来解析电话列表
在控制台应用程序中,这是可行的:

class Program
  {
    static void Main(string[] args)
    {

        Console.WriteLine( HttpPost());
        System.Threading.Thread.Sleep(10000);
    }

    public static string HttpPost()
    {
        var URI = @"http://sip.ligmarine.com/admin/config.php?quietmode=on&type=tool&display=printextensions";
        var Parameters = "display=printextensions&quietmode=on&type=tool&core=core&featurecodeadmin=featurecodeadmin&paging=paging";
        var retVal = "";
        WebClient wc = new WebClient();

        wc.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes("maint:password")));
        wc.Headers.Add("referer", @"http://sip.ligmarine.com/admin/config.php?type=tool&display=printextensions");
        wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

        retVal = Convert.ToBase64String(Encoding.ASCII.GetBytes("maint:password"));
        //Console.Write("Resulting Request Headers: ");
        //Console.WriteLine(wc.Headers.ToString());
        byte[] byteArray = Encoding.ASCII.GetBytes(Parameters);
        //Console.WriteLine("Uploading to {0} ...", URI);
        // Upload the input string using the HTTP 1.0 POST method.
        byte[] responseArray = wc.UploadData(URI, "POST", byteArray);
       // Console.WriteLine("\nResponse received was {0}", );

        retVal = Encoding.ASCII.GetString(responseArray);

        return retVal;
    }
}

从我们的IIS6托管的ASP.NET页面中,我得到了
远程主机强制关闭了现有连接说明:在执行当前网站期间发生未处理的异常
请求。请查看堆栈跟踪以了解有关错误和
它起源于法典。

Exception Details: System.Net.Sockets.SocketException: An existing connection was      forcibly closed by the remote host

 Source Error:

 Line 37:         //Console.WriteLine("Uploading to {0} ...", URI);
 Line 38:         // Upload the input string using the HTTP 1.0 POST method.
 Line 39:         byte[] responseArray = wc.UploadData(URI, "POST", byteArray);
 Line 40:         // Console.WriteLine("\nResponse received was {0}", );
 Line 41:

HttpPost方法与页面加载完全相同:

protected void Page_Load(object sender, EventArgs e)
{

    var ret = HttpPost();
    Response.Write(ret);
}
nfzehxib

nfzehxib1#

我有非常相似的情况,但不同的解决方案。在我的Windows 10开发机器+控制台应用程序上,WebClient.UploadDatahttps地址工作得很好。但当相同的确切函数被复制到一个ASP.NET MVC应用程序,并发布到不同的Web服务器(Windows 2008 R2)时,它会出现以下异常:
System.Net.WebException:基础连接已关闭:发送时发生意外错误。---〉System.IO. IO异常:无法从传输连接读取数据:远程主机强制关闭了一个现有连接。---〉System .NET.Sockets.SocketException:远程主机强制关闭了现有连接
两个项目都使用.NET Framework 4.6.1
通过使用TLS1.2进行调用解决。在UploadData之前添加以下内容:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Source

oymdgrw7

oymdgrw72#

这是一个DNS问题...服务器正在解析为专用IP控制台应用程序正在解析为公用

rbpvctlc

rbpvctlc3#

谢谢,你救了我的一天。对Azure AppService应用程序的请求引发了“..连接已关闭”异常。
设置***SecurityProtocolType.Tls12***已修复此问题。
也适用于

_webClient.DownloadString(url);

var webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
var resp = webRequest.GetResponse();
eni9jsuy

eni9jsuy4#

我也遇到了同样的问题。将安全协议设置为TLS1. 2并没有解决我的问题。我不得不按照建议添加另一行代码here

System.Net.ServicePointManager.Expect100Continue = false;
wnavrhmk

wnavrhmk5#

如果您使用的是.NETFramework4.0,它只有TlsSsl3

namespace System.Net
{
    public enum SecurityProtocolType
    {
        Ssl3 = 48,
        Tls = 192,
    }
}

您可以在.NET Framework 4.0中执行以下操作以使其正常工作:

// ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

因此Tls12的代码是3072。
或者只是升级你的项目,然后你就可以做评论的事情。

相关问题