WebClient из Asp.net выдает сообщение об ошибке «Существующее соединение было принудительно закрыто удаленным хостом» - PullRequest
7 голосов
/ 11 мая 2010

Я пытаюсь отправить сообщение в нашу звездочку, чтобы разобрать список телефонов

из консольного приложения это работает:

 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 Hosted 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);
}

Ответы [ 4 ]

18 голосов
/ 27 июля 2017

У меня была очень похожая ситуация, но другое решение. На моем компьютере с приложением Windows 10 + консольное приложение с адреса WebClient.UploadData до https работало нормально. Но когда одна и та же функция была скопирована в приложение ASP.NET MVC и опубликована на другом веб-сервере (Windows 2008 R2), она выдала следующее исключение:

System.Net.WebException: базовое соединение было закрыто: неожиданная ошибка произошла при отправке. ---> System.IO.IOException: Невозможно прочитать данные из транспортного соединения: существующий соединение было принудительно закрыто удаленным хостом. ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрывается удаленным хостом

Оба проекта использовали .NET Framework 4.6.1

Решено с помощью вызова TLS1.2. Добавьте это как раз перед UploadData:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Источник

2 голосов
/ 11 мая 2010

Это была проблема с DNS ... сервер разрешался в частном приложении ip console, разрешался в общедоступном

1 голос
/ 20 июля 2018

Спасибо, вы спасли мой день. Запросы к приложению Azure AppService вызывали исключение «.. соединение было закрыто».

Настройка SecurityProtocolType.Tls12 исправила проблему.

Также работает с

_webClient.DownloadString(url);

и

var webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
var resp = webRequest.GetResponse();
0 голосов
/ 22 июня 2019

У меня была такая же проблема. Установка протокола безопасности на TLS1.2 не устранила мою проблему. Мне пришлось добавить еще одну строку кода, как предложено здесь .

System.Net.ServicePointManager.Expect100Continue = false;
...