部署后 Azure 函数 .net 6 return 错误 500

Azure function .net 6 return error 500 after deploy

我已经将一个项目从 .net core 3.1 迁移到 .net 6.0。我有 resolved/updated 所有 nugets,我的函数在本地环境中运行良好(我在两台电脑上测试过)。该项目有一个 http 触发器和到数据库的连接。当我使用邮递员调用 api 并且在逻辑上不需要连接到数据库时,我的函数 return 200 关于 http 状态代码和预期的响应正文。但是,当函数需要连接到数据库时,我在日志中看到函数从数据库获取结果,尽管当函数 return 响应 return 错误 500 时所有逻辑运行良好。

任何关于异常的日志都显示在 azure 函数日志上,我也在 kudu 上搜索数据应用程序日志文件,但我没有找到与该问题相关的任何内容

Azure 日志(红色数据是从数据库中检索的)

邮递员

项目配置

Nugets

项目

Azure 函数属性

Azure 函数代码

 [FunctionName("FnDealSlip")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "v1/fintech/dealslip")] HttpRequest req,
        ILogger log)
    {

        string offerDate = req.Query["offerDate"];

        try
        {
            return await Invoke(req, log, (request, logger) =>
            {
                return _dealSlipService.GetDealSlipByOfferDate(offerDate);

            },
      (response, httpRequest, logger) =>
      {
          log.LogInformation("Response: " + JsonFormartter.Serialize(response));
          log.LogInformation("Response Status Code: " + JsonFormartter.Serialize(response.StatusCode));
          var actionResponse = new ObjectResult(response)
          {
              StatusCode = response.StatusCode

          };
          log.LogInformation("Response actionResponseSet: true ");
          return actionResponse;
      });
        }
        catch (Exception ex)
        {
            log.LogError("error fn: " + ex.Message);
            throw;
        }
      
    }
  • 因为 HTTP 函数需要 return HTTP 结果,请考虑将其更改为:
public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, 
    ILogger log)
{
    // your code goes here
    return req.CreateResponse(HttpStatusCode.OK, "Done");
  • 500 个内部错误甚至在我们的代码执行之前就发生了。当使用HTTP函数的客户端return出现500错误时,实际的HTTP Trigger函数并没有异常。
  • 还值得注意的是,当出现500错误时,No Single function works。结果,所有 HTTP 函数同时开始 returning 500 状态代码。其中 none 似乎正在记录任何内容。
  • 你已经检查过你的代码在本地工作,但是当你将它发布到 Azure 函数时,你会收到 500 错误。在那种情况下,您的 local.setting.json that was not created in the azure function under the application setting.
  • 中似乎有一些配置
  • 我还建议查看 Azure Functions diagnostics 以找出导致 500 问题的原因。

我发现了错误。将 .Net core 3.1 迁移到 .Net 6 后,出现了一些考虑因素:

  • 建议 Azure 函数不共享 azure 帐户
  • 如果不同的 Azure 函数共享同一个存储帐户,其名称必须是唯一的

错误是,link 用于存储帐户的 azure 函数的标识符是前 26 个字符,因此,我有不同的 azure 函数共享同一个存储帐户并且其名称长于 26 个字符,因为 link 刚拿了前 26 个,这引起了标识符的口是心非。

解决方案:在 Azure 配置设置上为每个函数定义一个自定义 hostid。例如

AzureFunctionsWebHost__hostId=mycustomfunctionname

更多详情 https://github.com/Azure/azure-functions-host/wiki/Host-IDs#host-id-collisions