Azure Functions HttpClient 请求中出现“找不到此主机”的错误。

11 浏览
0 Comments

Azure Functions HttpClient 请求中出现“找不到此主机”的错误。

我试图检查一个API是否在运行,但是当我将代码发布到Azure时,HttpClient无法获取任何东西,因为当它尝试 .SendAsync();时,我从Azure得到的错误消息是\"No Such Host is Known\",但是在本地环境中,这段代码没有改变可以正常工作。

根据这个,你有什么想法,可能会导致HttpClient Get失败?

public class ConnectionTester
    {
        [FunctionName("ConnectionTester")]
        public static async Task Run([TimerTrigger("* */30 * * * *")] TimerInfo connectionTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("Authorization", strAuth);
            HttpRequestMessage newRequest = new HttpRequestMessage(HttpMethod.Get, strLink);
            var response = await client.SendAsync(newRequest);
            if (response.IsSuccessStatusCode)
            {
                log.LogInformation("Success");
            }
            else
            {
                log.LogError("Error");
            }
        }
    }

admin 更改状态以发布 2023年5月22日
0
0 Comments

我已经遵循了问题中给出的相同代码,并在下面重现:

堆栈:Azure Functions (.NET 6) - 定时器触发器

Function1.cs

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace KrishFunctionApp1205
{
    public class Function1
    {
        [FunctionName("Function1")]
        public async Task RunAsync([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
            var strLink = "https://stackoverflow.com/";
            var strAuth = "Key05";
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("Authorization", strAuth);
            HttpRequestMessage newRequest = new HttpRequestMessage(HttpMethod.Get, strLink);
            var response = await client.SendAsync(newRequest);
            if (response.IsSuccessStatusCode)
                log.LogInformation("Okidoki");
            else
                log.LogError($"{response.StatusCode} {response.ReasonPhrase}: ");
        }
    }
}

local.settings.json

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    }
}

host.json:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            }
        }
    }
}

.csproj:


  
    net6.0
    v4
  
  
    
    
  
  
    
      PreserveNewest
    
    
      PreserveNewest
      Never
    
  

在本地运行时的结果:

Result

在 Azure 上运行时的结果:

enter image description here


说明:解决以下错误的几个步骤:

请求时出现“无法识别此主机”错误 HttpClient

  • 可能是 DNS 问题,请检查 URI 是否有效。

  • 您尝试发送到 URI 的请求被公司防火墙或系统防火墙阻止。

  • 更改 Azure 函数项目的端口号并运行该函数。(参见此处以了解如何更改 Azure Functions 中的端口号)

  • 如果在 Visual Studio 中有可用更新,则升级/更新 .NET 项目 SDK。

  • 检查连接字符串是否指向正确的值。
    要在本地运行并使用本地存储仿真器,请执行以下操作:

    "AzureWebJobsStorage": "UseDevelopmentStorage=true"

    如果要使用 Azure 存储帐户并在本地运行函数,请执行以下操作:

    "AzureWebJobsStorage": ""

您可以从 Azure 门户 > 存储帐户 > 访问密钥 > 连接字符串中获取此连接字符串。


0