在控制台中触发 HttpTrigger,但从 .NET 6 迁移到 .NET 8 后未能返回响应?它运行时间较长

问题描述 投票:0回答:1

使用 dotnet 隔离的工作线程升级将 Azure Function 从 .NET 6 迁移到 .NET 8 后,函数服务运行时没有错误,如控制台输出所示。但是,当尝试执行该函数时,不会调用 Http 触发器。相反,它会运行很长一段时间并最终返回 500 状态代码,而没有任何错误响应。

尽管删除了对 Startup 类的引用并为 Host Builder 和依赖项注入创建了 Program 类文件,但输出控制台仍然引用 Startup 类。

程序文件代码:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <AzureFunctionsVersion>v4</AzureFunctionsVersion>
        <OutputType>Exe</OutputType>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    
    <ItemGroup>
        <FrameworkReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Azure.Identity" Version="1.10.4" />
        <PackageReference Include="Microsoft.Azure.AppConfiguration.Functions.Worker" Version="7.1.0" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
        <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
    </ItemGroup>
    <ItemGroup>
        <None Update="host.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <None Update="local.settings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <CopyToPublishDirectory>Never</CopyToPublishDirectory>
        </None>
    </ItemGroup>
    <ItemGroup>
        <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
    </ItemGroup>
    
</Project>

**程序类代码:**

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureAppConfiguration(builder =>
    {
        string AppConfigurationConnection = Environment.GetEnvironmentVariable("AppConfig");
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(new Uri(AppConfigurationConnection), new DefaultAzureCredential())
            .ConfigureKeyVault(kv =>
            {
                kv.SetCredential(new DefaultAzureCredential());
            })
            .Select("*")
            .ConfigureRefresh(refresh =>
            {
                refresh.Register("Control", refreshAll: true)
                .SetCacheExpiration(new TimeSpan(0, 0, 30));
            });
        });
    })
    .ConfigureServices(services =>
    {
        // If using Kestrel:
        services.Configure<KestrelServerOptions>(options =>
        {
            options.AllowSynchronousIO = true;
        });

        // If using IIS:
        services.Configure<IISServerOptions>(options =>
        {
            options.AllowSynchronousIO = true;
        });

        services.AddAzureAppConfiguration();
        services.AddOptions<AzureAppConfigSettings>()
                        .Configure<IConfiguration>((settings, configuration) =>
                        {
                            configuration.GetSection("value").Bind(settings);
                        });
        services.AddHttpClient();
        services.AddSingleton<CommonService>();

    })
    .Build();

await host.RunAsync();

邮递员错误:

Error: read ECONNRESET
Request Headers
Content-Type: application/json
User-Agent: PostmanRuntime/7.37.0
Accept: */*
Postman-Token: 80bafe6e-83f3-4d92-9013-ece684c7c610
Host: localhost:7071
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

c# asp.net-core .net-core azure-functions
1个回答
0
投票

已通过重新排序工作器 NuGet 包解决了该问题。该函数现在按预期工作并在 Postman 中返回响应。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <AzureFunctionsVersion>v4</AzureFunctionsVersion>
        <PlatformTarget>AnyCPU</PlatformTarget>
        <OutputType>Exe</OutputType>
        <ImplicitUsings>enabled</ImplicitUsings>
    </PropertyGroup>

    <ItemGroup>
        <FrameworkReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.1" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.0" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.4" />
        <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0" />
        <PackageReference Include="Microsoft.Azure.AppConfiguration.Functions.Worker" Version="7.1.0" />
        <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.1.0" />

        <PackageReference Include="Azure.Identity" Version="1.10.4" />

    </ItemGroup>
    <ItemGroup>
        <None Update="host.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <None Update="local.settings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <CopyToPublishDirectory>Never</CopyToPublishDirectory>
        </None>
    </ItemGroup>
    <ItemGroup>
        <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
    </ItemGroup>
</Project>

邮递员回复

© www.soinside.com 2019 - 2024. All rights reserved.