问题:
我最近将我的 Azure Function App 从 .NET 6 迁移到 .NET 8,最初一切都运行顺利。然而,一段时间后,我开始遇到多个 HTTP 404 错误,这在 24 小时内影响了超过 1,000 个请求。
迁移上下文:从.NET 6到.NET 8的迁移已完成,迁移后所有功能均正确执行。
问题发生:一段时间后,我开始收到迁移前正常运行的各种端点的 404 Not Found 错误。
影响:这些错误导致停机和糟糕的用户体验,在 24 小时内影响了超过 1,000 个请求。
日志分析:我查看了API管理和功能日志,但无法确定根本原因。
验证迁移过程并确保应用程序设置正确。
查看 API 管理和功能日志是否存在差异。
检查路由配置以确保它们与 .NET 8 的设置保持一致。
我希望迁移到 .NET 8 能够提高我的 Azure Function App 的性能和可靠性。相反,我遇到了 .NET 6 中不存在的 HTTP 404 错误激增。
这是我的一个 Azure Functions 的简化代码片段:
[FunctionName("MyFunction")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "myendpoint/{id}")] HttpRequest req,
ILogger log,
string id)
{
log.LogInformation("Processing request for ID: " + id);
if (string.IsNullOrEmpty(id))
{
return new BadRequestObjectResult("ID is required.");
}
// Simulate processing the request
var result = await SomeService.ProcessAsync(id);
if (result == null)
{
return new NotFoundResult(); // This is where the 404 error occurs
}
return new OkObjectResult(result);
}
host.json:
{
"version": "2.0",
"functionTimeout": "00:10:00"
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
以下是记录的 404 错误的示例:
/myendpoint/1234 的 HttpRequest 失败,状态代码为 404
当使用有效的
id
调用该函数时,我希望它返回 200 OK 响应以及处理后的结果。然而,迁移后,许多有效请求会导致 404 错误。
您仍在使用旧的 .NET 6 进程内函数中的所有方法和属性。对 .NET 8 隔离的更改具有一组完全不同的属性。您的代码中可能还存在其他问题,也需要修复。
例如,你有这个:
[FunctionName("MyFunction")]
但是在独立的.NET 8中,属性会有所不同:
[Function("MyFunction")]
这可以解释为什么你会得到 404。可能你没有定义任何工作函数,因为属性是错误的。还可能存在其他问题,例如您如何初始化应用程序。
这里是开始了解 .NET 8 隔离要求的好地方:https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows #aspnet-core-集成