«Была предпринята попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ» при доступе к локальному хосту изнутри функции Azure.

Заявление об ограничении ответственности:

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

Контекст:

Приложение-функция Azure с триггером HTTP, работающее в 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

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

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

System.Net.Http.HttpRequestException

Сообщение

Была сделана попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ.

StackTrace

в System.Net.Http.ConnectHelper.ConnectAsync (строковый хост, порт Int32, CancellationToken cancellationToken) в System.Threading.Tasks.ValueTask1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask1.get_Result () в System.Net.Http.HttpConnectionPool.WaitForCore (ValueResult) > в System.Net.Http.HttpConnectionPool.SendWithRetryAsync (запрос HttpRequestMessage, логическое значение doRequestAuth, CancellationToken cancellationToken)
в System.Net.Http.RedirectHandler.SendAsyncation (запрос HttpRequestMessage) SendAsync (запрос HttpRequestMessage, CancellationToken cancellationToken) в System.Net.Http.HttpClient.FinishSendAsyncBuffered (Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean cts__Score_DisposeCress0. в /home/vsts/work/1/s/ScoreAddressFunction/ScoreAddressFunction/ScoreAddress.cs:line 85

Однако это сработает, если я изменю URL-адрес на что-то вроде "https://www.google.com ", что заставляет меня думать, что это не вызвано ограниченным количеством доступных сокетов, как указано в других ответах.

Вопрос:

Что-то не так - концептуально - с попыткой доступа к localhost (или 127.0.0.1) изнутри приложения-функции Azure? Мне не хватает каких-то технических ограничений / ограничений безопасности?

Одна из моих проблем заключается в том, что я смотрю на эту проблему с неправильной концептуальной точки зрения. Однако для процесса, который я выполняю, требуется МНОГО памяти, и если бы он работал с приложением-функцией Azure в то время, когда мне это нужно, это было бы здорово, иначе это будет очень дорого.


person Ricky Youssef    schedule 13.06.2019    source источник
comment
Проследите стек, пожалуйста.   -  person user207421    schedule 13.06.2019
comment
Я предполагаю, что вы были заблокированы какой-то политикой безопасности, настроенной в JVM на стороне сервера. Прочтите это и узнайте об этом и о приложении функций Azure: docs.oracle.com/cd/E19118-01/n1.sprovsys41/817-4820/6mkaodgb5/   -  person Jorge Campos    schedule 13.06.2019