Anand Saini Ответов: 0

Может ли кто-нибудь подсказать мне, как установить тайм-аут в .NET для httpwebrequest и ответа?


я использую API на нашем портале для перевода денег. Как я хочу отправить 20k, то он будет идти в 4 части, 5k в каждом вызове API, от компании API они сказали, что мы должны установить 3 минуты для каждого запроса. Вот мой код, как я установил тайм-аут, но он все еще показывает ошибку, когда прошло 3 минуты и второй запрос не завершен.

десятичный transferAmount = 0;
decimal _amount = 20000;
while (_amount > 0)
{
if (_amount > 5000)
{ transferAmount = 5000; }
еще
{ transferAmount = _amount }
строка webAddr = "https://www.test.in/transfer";
var httpWebRequest = (HttpWebRequest)WebRequest.Создать (webAddr);
класс HttpWebRequest.ContentType = " application/json; charset=utf-8";
класс HttpWebRequest.Method = " POST";
класс HttpWebRequest.Тайм-аут = 180000;

строка json = "";
используя (ВАР модулю записи StreamWriter = новая модулю записи StreamWriter(класса HttpWebRequest.Метод getrequeststream()))
{
формат JSON =
"{\"токен\":\"123456",\"accesskey\":\ "test123",\ " request\": {\"amount\": \ "" + _amount;
json = json + "\"}}";

модулю записи StreamWriter.Write(json);
модулю записи StreamWriter.Промывать();
модулю записи StreamWriter.Закрывать();
}
var httpResponse = (HttpWebResponse)httpWebRequest. GetResponse();
строка _resultFinal = "";
var responseText = "";
используя (вар что streamreader = новый поток streamreader(объект HttpResponse.GetResponseStream()))
{
responseText = streamReader. ReadToEnd();
XmlReader xReader = XmlReader.Create (new StringReader(responseText));

пока (xReader.Читать())
{
переключатель (xReader.Типа)
{
случай XmlNodeType.Элемент:
if (xReader.Name = = " xml " | / xReader.Название = = " банк")
перерыв;
еще
_resultFinal = _resultFinal + xReader.Name;
перерыв;
случай XmlNodeType.Текст:
_resultFinal = _resultFinal + " = " + xReader.Ценность + ", ";
перерыв;
}
}
xReader.Закрывать();
что streamreader.Закрывать();
}
объект HttpResponse.Закрывать();
объект HttpResponse.Располагать();
класс HttpWebRequest.Выкинуть();


_amount = _amount-transferAmount;
}

Что я уже пробовал:

Пожалуйста, посмотрите мой код и предложите мне, где я ошибаюсь, и поправьте меня, сэр

F-ES Sitecore

Вы уверены, что они не имели в виду три минуты между запросами? Если бы API потребовалось три минуты, чтобы сделать перевод, я бы нашел другого провайдера.

Anand Saini

3 минуты-это максимальные минуты ответа, я в 99% случаев отвечаю только через 5-10 секунд, но в 1% случаев это занимает больше времени, в этом 1% случаев я задаю этот вопрос.

F-ES Sitecore

usde блок try\catch для захвата, когда тайм-аут был поднят, и обработки его соответствующим образом.

Anand Saini

он идет время время, когда 3 минуты вверх означает 180 секунд завершено.
я не знаю, как это проверить и справиться с этим, вот почему спрашиваю, сэр.

F-ES Sitecore

Изменить

var httpResponse = (HttpWebResponse)httpWebRequest. GetResponse();

к

Класс httpwebresponse объект HttpResponse = нуль;

пробовать
{
httpResponse = (HttpWebResponse)httpWebRequest. GetResponse();
}
поймать (системы.Нет.Исключения webexception ехр)
{
Система.Диагностика.Отлаживать.WriteLine ("Error -" + exp.Message);
}

if (httpResponse = = null)
{
// обработайте ошибку соответствующим образом
}

Anand Saini

я работал и попробовал ваше предложение, спасибо за него.

Но что мне нужно, так это то, сколько раз этот цикл while выполняется, я хочу установить тайм-аут httpWebRequest на 180 секунд.

var httpWebRequest = (HttpWebRequest)WebRequest.Создать (webAddr);

Anand Saini

F-ES Sitecore: спасибо за ответ, я получил решение по вашему предложению.

0 Ответов