У меня есть веб-роль Azure, которая обращается к внешней веб-службе SOAP на основе WCF (порт 80) для различных битов данных.Ответ от этого сервиса очень неустойчивый.Обычно я получаю следующую ошибку:
Не было прослушивания конечной точки на http://www.myexternalservice.com/service.svc, которая могла бы принять сообщение.Это часто вызывается неправильным адресом или действием SOAP.
Чтобы изолировать проблему, я создал простое консольное приложение, которое периодически вызывает эту службу с интервалом в 1 секунду и регистрирует все ответы.
using (var svc = new MyExternalService())
{
stopwatch.Start();
var response = svc.CallService();
stopwatch.Stop();
Log(response, stopwatch.ElapsedMilliseconds);
}
Если я отправляю RDP в один из моих веб-экземпляров Azure и запускаю это приложение, потребуется 10-20 попыток, прежде чем оно получит действительный ответ от внешней службы.Эти первые попытки всегда сопровождаются вышеуказанной ошибкой.После этого «периода разогрева» все работает нормально.Если я остановлю приложение, а затем сразу же перезапущу, оно должно пройти тот же период «прогрева».
Однако , если я запускаю это же приложение с любой другой машины, которую получаюдействительные ответы немедленно.Я запустил это приложение для ведения журнала на серверах, работающих в нескольких центрах обработки данных (не Azure), на рабочих столах в разных сетях и т. Д. Эти тестовые прогоны всегда очень стабильны.
Я не уверен, почему эта служба будет реагироватьтаким образом в среде Azure.К сожалению, в течение короткого времени я вынужден вызывать эту услугу, но мои пользователи не могут терпеть это несоответствие.
Захват сетевого трафика на сервере Azure указывает на большое количество SynReTransmit .с интервалами в 10 секунд в это же время я испытываю ошибки соединения.После завершения «разогрева» SynReTransmit больше не происходит.