Отказ от ответственности :
Это клише, но оно работает на моей машине (!)
Контекст :
HttpТриггерное приложение-функция Azure, работающее в Windows с параметром «Свободный уровень».
Подробности :
У меня есть приложение-функция Azure, на котором размещается и запускается файл JAR, который вращаетсядо сервера Grizzly, который в основном обслуживает приложение JAVA, размещенное на localhost: 8080 Функциональному приложению удается запустить приложение JAVA, просто используя.Приложение JAVA называется Open Trip Planner и работает на сервере Grizzly.
Process.Start(javaPath, "<<JAR OPTIONS HERE>>");
- Вплоть до тех пор, пока оно не будет работать на моем компьютере и Azure.
ТогдаЯ запускаю отдельный поток, который проверяет, что приложение запущено:
while (true)
{
Thread.Sleep(10000);
try
{
var result = await client.GetAsync("http://localhost:8080");
// <-- The above fails in Azure but not in my local machine.
}
catch (Exception ex)
{
log.LogError(ex.Message);
}
}
Исключение составляет: «Была сделана попытка получить доступ к сокету способом, запрещенным его правами доступа»
Сведения об исключении :
Тип исключения :
Система.Net.Http.HttpRequestException
Сообщение
Была предпринята попытка получить доступ к сокету способом, запрещенным его правами доступа
StackTrace
в System.Net.Http.ConnectHelper.ConnectAsync (строковый хост, порт Int32, CancellationToken cancellationToken) в System.Threading.Tasks.ValueTask 1.get_Result() at
System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage
request, CancellationToken cancellationToken) at
System.Threading.Tasks.ValueTask
1.get_Result () в System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (ValueTask 1
creationTask) at System.Threading.Tasks.ValueTask
1.get_Result ()
в System.Net.Http.HttpConnectionPool.SendWithRetryAsync (запрос HttpRequestMessage, логическое значение doRequestAuth, CancellationToken cancellationToken)
в System.Net.Http.RedirectHandler.SendAsync (запрос HttpRequestMestage.OgnTokenHokTech)в System.Net.Http.HttpClient.FinishSendAsyncBuffered (Task`1 sendTask, запрос HttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts) в ScoreAddressFunction.ScoreAddress. <> c__DisplayClass3_0.d.MoveNext () в /home/vsts/work/1/s/ScoreAddressFunction/ScoreAddressFunction/ScoreAddress.cs:line 85
Однако работает, если я изменяюURL на что-то вроде "https://www.google.com", что заставляет меня думать, что это не вызвано ограниченным количеством доступных сокетов, как прочитано в других ответах.
Вопрос :
Что-то не так - концептуально - при попытке доступа к localhost (или 127.0.0.1) из приложения-функции Azure? Я пропускаю некоторые технические ограничения / ограничения безопасности?
Одна из моих проблем заключается в том, что яЯ сталкиваюсь с этой проблемой с неправильной концептуальной точки зрения. Однако процессу, который я запускаю, нужно МНОГО памяти , и если он будет работать в приложении функций Azure в течение необходимого мне времени, это было бы здорово, иначебыть очень дорогим.