Httprequestexception произошла ошибка при отправке запроса

I have three layer application architecture.

My Client —> My service A (REST hosted in IIS) —> Other Team’s service X (REST).

Service A is ASP.Net 4.6.1 framework, not ASP.Net Core.

Client is communicating to A with HttpClient and A is communicating to X with HttpClient.

Client is firing almost 2500 calls to my service to A and to X.

Out of 2500 calls service A randomly (may be 10 calls) fails with below exception. Its not reproducible.

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> 
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a 
receive. ---> System.IO.IOException: Unable to read data from the transport connection: An     
established connection was aborted by the software in your host machine. ---> 
System.Net.Sockets.SocketException: An established connection was aborted by the software in your 
host machine
at System.Net.Sockets.Socket.BeginReceive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags 
socketFlags, AsyncCallback callback, Object state)
at System.Net.Sockets.NetworkStream.BeginRead(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback 
callback, Object state)
 --- End of inner exception stack trace ---
at System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
at System.Net.TlsStream.EndRead(IAsyncResult asyncResult)
at System.Net.Connection.ReadCallback(IAsyncResult asyncResult)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
--- End of inner exception stack trace --

Here is my service A call. A in IIS calls below code block and its called by each request. X is taking user credentials and returning data based on user, so we are not sharing HttpClient between calls.

var user = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;
            System.Security.Principal.WindowsIdentity.RunImpersonated(user.AccessToken, () =>
      {
        static HttpClient Client = new HttpClient();
        static string CallX(string[] args)
        {
            HttpClientHandler handler = new HttpClientHandler
            {
                UseDefaultCredentials = true
            };    

            Client = new HttpClient(handler)
            {
                BaseAddress = new Uri("http://XserviceUrl/api/")
            };
            Client.Timeout = TimeSpan.FromSeconds(600);    
            var result = Client.PostAsync("Fake X controller"
                , new StringContent(JsonConvert.SerializeObject(args)
                , Encoding.UTF8, "application/json")).Result;    

            result.EnsureSuccessStatusCode();

            var json = result.Content.ReadAsStringAsync().Result;
            return DosomethingWithResult(json);    
        }
    });

Things I tried:

Some SO post suggested might be timeout issue. So I added 600 seconds in Client and in Service A. I also changed IIS request timeout from default 2 minutes to 10 (600 seconds).

I was having a WebClient that was requesting an URL. I wanted to do the same thing within a UWP application, and I saw that I had to import Microsoft.Net.Http and use HttpClient.

So I replaced this(that was in a Class library):

WebClient client = new WebClient();
client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
string content = client.DownloadString(url);

By this in a PCL library:

HttpClient client = new HttpClient();
string content = await client.GetStringAsync(url);

And now I got this exception:

System.Net.Http.HttpRequestException occurred
  HResult=-2147012867
  Message=An error occurred while sending the request.
  Source=System.Net.Http
  StackTrace:
       at System.Net.Http.HttpClientHandler.<SendAsync>d__1.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at XXXX.YYYY.MHDJ.ZZZZ.<ParsePage>d__4.MoveNext()
  InnerException: 
       ErrorCode=-2147012867
       HResult=-2147012867
       Message=Le texte associé à ce code d’erreur est introuvable.

Impossible d'établir une connexion avec le serveur

       Source=""
       StackTrace:
            at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__1.MoveNext()
         --- End of stack trace from previous location where exception was thrown ---
            at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            at System.Net.Http.HttpClientHandler.<SendAsync>d__1.MoveNext()
       InnerException: 

I don’t think the issue is the Headers, so what is?

asked Apr 14, 2016 at 19:05

J4N's user avatar

1

The HRESULT code -2147012867 in hex is 0x80072EFD. The 0x8007 prefix means it’s actually an HRESULT wrapper around a Win32 error code. The original Win32 error code is 0x2EFD.

The Win32 error code list tells us that values 0x2EE0 through 0x2F8F are ERROR_INTERNET_* error codes, which sounds like the right kind of error. After following the link to the Win32 ERROR_INTERNET_* error code listing, we can convert our error code 0x2EFD back to decimal (12029) and discover it is error ERROR_INTERNET_CANNOT_CONNECT:

The attempt to connect to the server failed.

Rather generic, and not much help.

I’d recommend trying the connection again, ensuring that your application has appropriate permissions and the device actually has a working Internet connection. If that doesn’t work, try adding the UserAgent header back in; it’s possible that the networking stack on your device insists on it.

Update: Tracking down the error code meaning was rather tedious, so I wrote an app to do it.

answered Apr 14, 2016 at 19:42

Stephen Cleary's user avatar

Stephen ClearyStephen Cleary

433k76 gold badges668 silver badges801 bronze badges

7

Experienced the 0x80072efd problem. Has cost me hours if not days to solve. The solution that worked for me was the following command from an admin command prompt:

netsh winhttp reset proxy

answered Aug 5, 2016 at 11:07

Paul0515's user avatar

Paul0515Paul0515

23k9 gold badges31 silver badges47 bronze badges

0

There are so many ways to do things, and I’m not suggesting that this is the best way, but this is how I construct my methods. This example is what I use to return a list of U.S. State objects that are provided in JSON format. One important note… this is in a Universal Windows class library, not a PCL… but I do not believe it uses anything that a PCL does not have access to.

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using System.Threading.Tasks;

//IStateInfo is my model class interface
public async Task<IList<IStateInfo>> GetAllStatesAsync()
{
    List<IStateInfo> states = new List<IStateInfo>();
    try
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://YourBaseApiHere");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            string url = "lookup/usstates";
            HttpResponseMessage response = await client.GetAsync(url);
            if (response.IsSuccessStatusCode)
            {
                var json = await response.Content.ReadAsStringAsync();
                //deserialize into client class Newtonsoft JSON used here
                var lst = JsonConvert.DeserializeObject<List<StateInfo>>(json);
                states.AddRange(lst);
            }
            else
            {
                //notify of failed web call here
            }
        }
    }
    catch (Exception e)
    {
        //notify of error
    }
    return states;
}

answered Apr 15, 2016 at 13:26

Mark W's user avatar

Mark WMark W

1,0507 silver badges15 bronze badges

4

#c# #mysql #visual-studio #xamarin #mysql-error-1064

#c# #mysql #visual-studio #xamarin #mysql-ошибка-1064

Вопрос:

Я работаю с visual studio 2017 и MySQL. Недавно у меня возникла проблема с жестким диском моего компьютера, поэтому пришлось его заменить. Я загрузил visual studio и MySQL заново.У меня был мой код на флеш-накопителе, поэтому я импортировал код обратно в visual Studio и воссоздал таблицы для MySQL. Я успешно подключил свою visual Studio к MySQL. Это мой код.

Страница приветствия

  public async Task<List<string>> UserNumber()
    {
        MainUserDataRestClient<string> restClient = new MainUserDataRestClient<string>();
        var GetNumber = await restClient.GetAsync();
        return GetNumber;
    }



    protected override async void OnAppearing()
    {
        base.OnAppearing();
        List<string> Number = new List<string>();
        Number = await UserNumber();
        await MainProgressBar.ProgressTo(0.8, 1000, Easing.Linear);

        App.Current.MainPage = new NavigationPage(new HomePage())
        {
            BarBackgroundColor = Color.FromHex("#35ddcf")
        };
        int i = Number.Count;
        if (i == 0)
        {
            await  MainProgressBar.ProgressTo(0.8, 1000, Easing.Linear);
            App.Current.MainPage = new MainPage();
        }
        else
        {
            await MainProgressBar.ProgressTo(0.8, 1000, Easing.Linear);
            App.Current.MainPage = new NavigationPage(new HomePage())
            { BarBackgroundColor = Color.FromHex("#35ddcf") };
        }
    }
}
  

Restcient

   public class MainUserDataRestClient<T>
{
    private const string WebServiceUrl = "http://localhost:57645/api/MainUserData/";


    public async Task<List<T>> GetAsync()
    {

        var httpClient = new HttpClient();

        var json = await httpClient.GetStringAsync(WebServiceUrl);

        var taskModels = JsonConvert.DeserializeObject<List<T>>(json);

        return taskModels;
    } }
  

Контроллер

  public class MainUserDataController : Controller
{
    // GET: api/MainUserData
    [HttpGet]
    public List<string> Get()
    {
        string sqlstring = "server=localhost; port=3306 ; user id =root;Password=;Database=test;";
        MySqlConnection conn = new MySqlConnection(sqlstring);
        MainPhoneNumber MNP = new MainPhoneNumber();

        MySqlParameter param = new MySqlParameter();
        param.ParameterName = "@id";
        param.Value = MNP.PhoneNumber;


        try
        {
            conn.Open();
        }
        catch (MySqlException ex)
        {
            throw ex;
        }
        string Query = "SELECT * FROM test.maintable where Telephone = @id ";
        MySqlCommand cmd = new MySqlCommand(Query, conn);
        cmd.Parameters.Add(param);
        MySqlDataReader MSQLRD = cmd.ExecuteReader();
        List<string> GetBizList = new List<string>();

        if (MSQLRD.HasRows)
        {

            while (MSQLRD.Read())
            {
                string BV;
                BV = (MSQLRD["Telephone"].ToString());
                GetBizList.Add(BV);
            }
        }

        conn.Close();
        return GetBizList;
    } }
  

Когда я запускаю код, я не могу извлечь данные из базы данных MySQL, и я получаю это исключение.

Необработанное исключение: system.net.http.httprequestexception: произошла ошибка при отправке запроса

Чего я не понимаю?

Ответ №1:

Это не похоже на ошибку базы данных. Похоже, что ошибка исходит из этой строки:

 var json = await httpClient.GetStringAsync(WebServiceUrl);
  

У меня не так много информации о вашей рабочей среде, но из URL-адреса кажется, что вы используете iis-Express. Первое, на что нужно обратить внимание, это URL:

 private const string WebServiceUrl = "http://localhost:57645/api/MainUserData/";
  

Правильный ли порт в вашей новой настройке, или он изменился, и вы пытаетесь перейти по несуществующему URL?

Второе, на что следует обратить внимание, верен или нет, вы можете установить точку останова в вашем контроллере. Если да, есть ли у вас там какие-либо ошибки / исключения?

Добавьте дополнительную информацию, если приведенные выше предложения не сработали, чтобы мы могли лучше помочь вам.

Комментарии:

1. Как узнать, изменился ли URL-адрес?

2. Я использую iis-Express, как вы и указали.

3. При запуске вашего API появится значок в трее с iis express, а при наведении курсора мыши можно увидеть URL-адрес с текущим портом.

4. URL-адрес тот же.

5. Пожалуйста, есть ли у вас какие-либо другие предложения? Мне нужна помощь.

Студворк — интернет-сервис помощи студентам

Приветствую
Сразу поясню, что

бота делаю впервые, с языком знакома на уровне бегиннера, короч основы основ

, поэтому буду признательна подробным объяснением в разрешении моей проблемы.

Делаю бот с принципом получил ответ, выдал: ссылку на сайт с интересующей книгой !ИЛИ! всю ранее сохраненную инфу о продавцах книг !ИЛИ! инфа о покупателях книг (инфа о покупателях/продавцах по теории должна хранится в БД).

Инфу о создании бота смотрю в сети, и делаю все по инструкции, но возникла ошибка, а точнее исключение, и я не знаю как самостоятельно с ним справиться.

Мой материал 16-17 года, где-то не совпадает с реальностью.
Искл возникает на строчке

C#
1
var me = Bot.GetMeAsync().Result;

Где как я поняла осуществляется возможность получения результата от моего бота. Связь с ботом никак не осуществляется, действия ни в командной строке ни в телеграме не отображаются.

Конкретно выдаваемые ошибки в исключении

HttpRequestException: Произошла ошибка при отправке запроса.
WebException: Базовое соединение закрыто: Непредвиденная ошибка при передаче.
IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение.
SocketException: Удаленный хост принудительно разорвал существующее подключение

Подключенные библиотеки:

C#
1
2
3
4
5
6
7
8
9
10
11
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Args;

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Program
    {
        static TelegramBotClient Bot;
 
        static void Main(string[] args)
        {
            Bot = new TelegramBotClient("МОЙ ТОКЕН В КОДЕ ЕСТЬ");
 
            Bot.OnMessage += Bot_OnMessage;
            Bot.OnCallbackQuery += Bot_OnCallbackQuery;
 
            var me = Bot.GetMeAsync().Result; // ИСКЛЮЧЕНИЕ!
 
            Console.WriteLine(me.FirstName);
 
            Bot.StartReceiving();
            Console.ReadLine();
            Bot.StopReceiving();
        }
 
private static void Bot_OnCallbackQuery(object sender, CallbackQueryEventArgs e)
        {
            throw new NotImplementedException();
        }
private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;
            if (message.Type != MessageType.Text) //проверка пустот и не текстовости сообщения
                return;
            string name = $"{message.From.FirstName} {message.From.LastName}"; //ИФ
            Console.WriteLine($"{name} написал '{message.Text}'");
        }

У меня трехуровневая архитектура приложения.

Мой клиент -> Моя служба A (REST, размещенная в IIS) -> Служба другой команды X (REST).

Сервис A — это платформа ASP.Net 4.6.1, а не ASP.Net Core.

Клиент обменивается данными с A с помощью HttpClient, а A обменивается данными с X с помощью HttpClient.

Клиент совершает почти 2500 звонков в мою службу для A и X.

Из 2500 вызовов служба A случайным образом (может быть 10 вызовов) дает сбой, за исключением нижеприведенных. Это не воспроизводится.

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> 
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a 
receive. ---> System.IO.IOException: Unable to read data from the transport connection: An     
established connection was aborted by the software in your host machine. ---> 
System.Net.Sockets.SocketException: An established connection was aborted by the software in your 
host machine
at System.Net.Sockets.Socket.BeginReceive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags 
socketFlags, AsyncCallback callback, Object state)
at System.Net.Sockets.NetworkStream.BeginRead(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback 
callback, Object state)
 --- End of inner exception stack trace ---
at System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
at System.Net.TlsStream.EndRead(IAsyncResult asyncResult)
at System.Net.Connection.ReadCallback(IAsyncResult asyncResult)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
--- End of inner exception stack trace --

Вот моя услуга Звонок. A в IIS вызывает нижеприведенный блок кода и вызывается каждым запросом. X принимает учетные данные пользователя и возвращает данные в зависимости от пользователя, поэтому мы не разделяем HttpClient между вызовами.

var user = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;
            System.Security.Principal.WindowsIdentity.RunImpersonated(user.AccessToken, () =>
      {
        static HttpClient Client = new HttpClient();
        static string CallX(string[] args)
        {
            HttpClientHandler handler = new HttpClientHandler
            {
                UseDefaultCredentials = true
            };    

            Client = new HttpClient(handler)
            {
                BaseAddress = new Uri("http://XserviceUrl/api/")
            };
            Client.Timeout = TimeSpan.FromSeconds(600);    
            var result = Client.PostAsync("Fake X controller"
                , new StringContent(JsonConvert.SerializeObject(args)
                , Encoding.UTF8, "application/json")).Result;    

            result.EnsureSuccessStatusCode();

            var json = result.Content.ReadAsStringAsync().Result;
            return DosomethingWithResult(json);    
        }
    });

Что я пробовал:

Некоторые предложенные сообщения SO могут быть проблемой тайм-аута. Поэтому я добавил 600 секунд в Client и Service A. Я также изменил время ожидания запроса IIS с 2 минут по умолчанию на 10 (600 секунд).

Уважаемые тостерчане такая у меня проблема не могу залить файлы на github после команды git push -u origin master выдает ошибку #1, игнорирую ошибку и ввожу логин и пароль после чего выдает ошибку #2. Все делал как обычно, раньше вообще не было проблем с git-ом, может ошибка на стороне github-a. Переустанавливал винду может как то криво поставил git даже не знаю где копать, и хвоста и головы не видно. Может кто сталкивался с этой ошибкой, буду рад послушать.

5b58b1d299731974083620.jpeg


  • Вопрос задан

    более трёх лет назад

  • 2025 просмотров

Попробуй сначало все-таки git pull origin master сделать

Ваша удалённая ветка содержит коммиты, которых нет в локальной ветке. Для начала нужно загрузить изменения из удалённой ветки, а потом отправлять на сервер локальную.
Владислав Яндимиркин выше подсказал, какой именно командой их загрузить и объединить в локальную.

Пригласить эксперта


  • Показать ещё
    Загружается…

04 июн. 2023, в 01:35

1500 руб./за проект

04 июн. 2023, в 01:25

40000 руб./за проект

03 июн. 2023, в 23:42

1500 руб./за проект

Минуточку внимания

System.Net.Http.HttpRequestException: ‘An error occurred while sending the request.’

Updated on August 27, 2021

Sudenly I received a strange error in a production website while trying to do a simple http request that was working fine the previous day. The error that was thrown was the following:

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at CL.Helper.Api.MailChimpController.<AddUserToList>d__5.MoveNext() 

This line was trying to make a call to an API endpoint at MailChimp that added an email to a list. Testing the code locally and using unit testing worked perfectly and without any issue.

After debuging the error locally I found out that the details where hiding in the inner exception that were not exposed in the logs and the issue had to do with the server not being able to create a secure channel with the client. The message was: The request was aborted: Could not create SSL/TLS secure channel.

   at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)

So investigating a bit I realised that most likely MailChimp stopped supporting older protocols and now only allowed TLS12. Good news there was a simple fix to that:

   ServicePointManager.Expect100Continue = true;
   ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Simply adding the two lines above before the request fixed the issue.

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Human fall flat ошибка при запуске
  • Httpd exe ошибка при запуске приложения 0xc000007b
  • Human fall flat ошибка аутентификации на телефоне
  • Http ошибки страницы

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии