Заявление об ограничении ответственности:
Это клише, но на моей машине работает (!)
Контекст:
Приложение-функция 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);
}
}
Исключение: «« Была сделана попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ »
Сведения об исключении:
Тип исключения:
System.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.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 в то время, когда мне это нужно, это было бы здорово, иначе это будет очень дорого.