Делать несколько HTTP-запросов / ответов, когда 4xx response теряет соединение - PullRequest
3 голосов
/ 11 сентября 2011

Я работаю над клиентом для REST API.Сервер возвращает ответы 4xx как само собой разумеющееся.В данный момент я использую HttpWebRequest / HttpWebResponse для совершения звонков.Проблема в том, что HttpWebRequest создает исключение для кодов 4xx (и 5xx).Я ловлю исключение и затем (обычно) отправляю другой запрос на основе данных в сообщении 4xx (например, попробуйте POST, затем MERGE в случае ошибки).

Это работает, но каждый раз повторное подключение TCP / HTTP стоит дорого.Я хочу получить поток ответа или объект, который содержит данные ответа, но не выдает исключение, что позволяет мне сделать еще один запрос на соединение (через keep-alive),Это должно снизить нагрузку на соединение и повысить производительность.

Один из способов, которые я рассмотрел, - это непосредственное использование TcpClient, но это головная боль, поскольку мне приходится писать код для поддержки фрагментированных данных, кодировок, прокси и т. Д. Я надеюсь избежать этого.

Есть ли способ предотвратить исключения WebException с помощью HTTP-клиента System.Net?Если нет, есть ли другие варианты (надеюсь, с открытым исходным кодом)?Любые предложения приветствуются.

1 Ответ

2 голосов
/ 11 сентября 2011

Не уверен, почему ваше HTTP-соединение закрывается из-за исключения, однако, если вы используете HttpClient отсюда http://nuget.org/List/Packages/HttpClient, оно не выдает исключение на 400.

...