多次调用时,Ngrok不会将响应从本地主机传递回azure函数

时间:2019-02-07 22:50:42

标签: azure asp.net-web-api2 azure-functions dotnet-httpclient ngrok

当前,我们有一个Azure函数(消费模式),该函数向运行在本地主机上的API发出HTTP请求。

Localhost API使用Web API构建并在Windows 10上运行。

Azure函数只有一个静态的HttpClient实例,我们将HttpClient实例重新用于所有调用。

public static class AzureFunctionApp
    {
        static HttpClient _httpClient = new HttpClient();

        [FunctionName("NameOfFunction")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log, CancellationToken cancellationToken)
        {
        //await _httpClient.GetAsync
                 // some business rules
                //await _httpClient.SendAsync
                 // some business rules
                //await _httpClient.GetAsync
                 // some business rules
                //await _httpClient.PostAsync

    }

我们正在使用ngrok通过以下参数公开localhost API

ngrok http 55386 -host-header="localhost:55386" -region=au

在上述设置中

  • Azure函数成功完成了第一个localhost API调用
  • Azure函数将请求发送到第二个localhost API,但未收到响应,导致Azure函数超时。如果在localhost API中设置了断点,则可以看到响应已成功返回,但azure函数未收到该响应。
  • Azure功能最终超时

以下是ngrok屏幕截图

  • 执行Azure函数之前

enter image description here

  • Azure函数执行后(超时)

enter image description here

如果我更新AzureFunction应用程序以为每个请求创建一个新的HttpClient,则azure函数的执行将成功完成。

以下是ngrok的屏幕截图

  • 执行Azure函数之前

enter image description here

  • Azure函数执行后

enter image description here

以上不是我们可以实现的解决方案,因为我们将在生产环境中用尽最大连接限制以及其他性能限制。

按照以下问题

Ngrok not passing my post request on to localhost

我也曾尝试公开功能应用程序的HTTP端口,但在第一次localhost API调用后仍会超时。

猜想问题是-这是我们不得不转向更高计划(基本/专业版)的情况吗?还是我在这里遗漏了一些东西?

谢谢。

0 个答案:

没有答案