«Была предпринята попытка получить доступ к сокету способом, запрещенным его правами доступа» при доступе к localhost из функции Azure. - PullRequest
1 голос
/ 13 июня 2019

Отказ от ответственности :

Это клише, но оно работает на моей машине (!)

Контекст :

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);
                      }
                  }

Исключение составляет: «Была сделана попытка получить доступ к сокету способом, запрещенным его правами доступа»

Azure Function App Logs

Сведения об исключении :

Тип исключения :

Система.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 в течение необходимого мне времени, это было бы здорово, иначебыть очень дорогим.

...