3

免责声明

这是陈词滥调,但它适用于我的机器(!)

上下文

使用“免费套餐”选项在 Windows 上运行的 Http 触发 Azure 函数应用程序。

详情

我有一个 Azure 函数应用程序,它托管并运行一个 JAR 文件,该文件启动一个 Grizzly 服务器,该服务器基本上为托管在 localhost:8080 中的 JAVA 应用程序提供服务。函数应用程序只需使用即可启动 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);
                      }
                  }

例外是:““试图以访问权限禁止的方式访问套接字”</p>

Azure 函数应用日志

异常详情

异常类型

System.Net.Http.HttpRequestException

信息

试图以访问权限禁止的方式访问套接字

堆栈跟踪

在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32 端口,CancellationToken 取消令牌)在 System.Threading.Tasks.ValueTask 1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask1.get_Result() 在 System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask 1 creationTask) at System.Threading.Tasks.ValueTask1.get_Result()
在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken 取消令牌)
在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancelToken) 在 System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancelToken) 在 System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage 请求,CancellationTokenSource cts,布尔 disposeCts) 在 ScoreAddressFunction.ScoreAddress.<>c__DisplayClass3_0.<b__0>d.MoveNext() 在 /home/vsts/work/1/s/ScoreAddressFunction/ScoreAddressFunction/ScoreAddress.cs:line 85

但是,如果我将 URL 更改为“ https://www.google.com ”之类的东西,它会起作用,这让我认为这不是由其他答案中可用套接字数量有限引起的。

问题

尝试从 Azure Function App 内部访问 localhost(或 127.0.0.1)是否有问题?我是否缺少一些技术/安全限制?

我担心的一个问题是我从错误的概念角度来面对这个问题。但是,我运行的进程需要大量内存,并且在我需要的时候让它在 Azure Function App 上运行会很棒,否则会非常昂贵。

4

0 回答 0