关于.net:使用-NET-7Blazor-和-NET-MAUI-构建你自己的-Podcast-App

97次阅读

共计 3969 个字符,预计需要花费 10 分钟才能阅读完成。

.NET Podcast App 首次在 .NET Conf 2021 上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新性能。该 Podcast App 已筹备好应用展现 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Container Apps,Orleans,Power Platform,Playwright 等示例应用程序。在本文中,我将解释所有新性能并展现咱们如何降级 .NET Podcast App 以利用它们。

架构

如前所述,.NET Podcast App 应用云原生架构来反对挪动、桌面和 Web 应用程序。微服务用于增加和更新 podcasts 提要的工作服务以及为应用程序提供数据的 API。这些都由 Azure Container Apps 提供反对,以依据每个服务的不同特色动静扩大微服务。

.NET Podcast App 还有很多其余性能,包含为咱们的数据库集成到 Azure SQL Server,用于保留图像和排队提交的 Azure Storage,以及用于利用 Power Apps 和 Power Automate 中的 API 的 Azure API Management。

API 更新

.NET Podcast API 已更新为应用 ASP.NET Core 中的最新性能,包含输入缓存、速率限度、API 版本控制和用于最小 API 的新路由组。此外,它将最新的加强性能与身份验证和受权集成在一起,为开发人员大大简化了这些性能。

// Authentication and authorization-related services

builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration);

builder.Services.AddAuthorizationBuilder().AddPolicy("modify_feeds", policy => policy.RequireScope("API.Access"));

// OpenAPI and versioning-related services
builder.Services.AddSwaggerGen();
builder.Services.Configure<SwaggerGeneratorOptions>(opts =>
{opts.InferSecuritySchemes = true;});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddApiVersioning(options =>
{options.DefaultApiVersion = new ApiVersion(2, 0);
    options.ReportApiVersions = true;
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ApiVersionReader = new HeaderApiVersionReader("api-version");
});

// Enable Output Cache
builder.Services.AddOutputCache();

// Rate-limiting and output caching-related services
builder.Services.AddRateLimiter(options => options.AddFixedWindowLimiter("feeds", options =>
{
    options.PermitLimit = 5;
    options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    options.QueueLimit = 0;
    options.Window = TimeSpan.FromSeconds(2);
    options.AutoReplenishment = false;
}));

// Create version set
var versionSet = app.NewApiVersionSet()
                    .HasApiVersion(1.0)
                    .HasApiVersion(2.0)
                    .ReportApiVersions()
                    .Build();

// create new mapping for apis
var shows = app.MapGroup("/shows");

shows
    .MapShowsApi()
    .WithApiVersionSet(versionSet)
    .MapToApiVersion(1.0)
    .MapToApiVersion(2.0);

可察看性和监控

构建和部署服务器后,你须要察看和监控它们。在咱们的主题演讲中,咱们展现了如何通过几行代码集成 Open Telemetry、Azure Monitor 等,以此齐全检测你的服务器。

builder.Services.AddOpenTelemetryTracing(tracing =>
        tracing.SetResourceBuilder(serviceResource)
        .AddAzureMonitorTraceExporter(o =>
        {o.ConnectionString = azureMonitorConnectionString;})
        .AddJaegerExporter()
        .AddHttpClientInstrumentation()
        .AddAspNetCoreInstrumentation()
        .AddEntityFrameworkCoreInstrumentation());

builder.Services.AddOpenTelemetryMetrics(metrics =>
{
    metrics
    .SetResourceBuilder(serviceResource)
    .AddPrometheusExporter()
    .AddAzureMonitorMetricExporter(o =>
    {o.ConnectionString = azureMonitorConnectionString;})
    .AddAspNetCoreInstrumentation()
    .AddHttpClientInstrumentation()
    .AddRuntimeInstrumentation()
    .AddProcessInstrumentation()
    .AddHttpClientInstrumentation()
    .AddEventCountersInstrumentation(ec =>
    {ec.AddEventSources("Microsoft.AspNetCore.Hosting");
    });
});

builder.Logging.AddOpenTelemetry(logging =>
{
    logging
    .SetResourceBuilder(serviceResource)
    .AddAzureMonitorLogExporter(o =>
    {o.ConnectionString = azureMonitorConnectionString;})
    .AttachLogsToActivityEvent();});

.NET SDK 容器

.NET Podcast 应用程序由微服务和容器提供反对。.NET SDK 当初只需更改几处配置即可将你的应用程序容器化。此性能现已集成到为 .NET Podcast 应用程序和 CI/CD pipeline 提供反对的服务中。

<PropertyGroup>
    <ContainerImageName>podcastapi</ContainerImageName>
</PropertyGroup>

<ItemGroup>
    <PackageReference Include="Microsoft.NET.Build.Containers" Version="0.2.7" />
</ItemGroup>
dotnet publish -c Release -r linux-x64 -p PublishProfile=DefaultContainer src/Services/Podcasts/Podcast.API/Podcast.API.csproj

Playwright 测试

Playwright 是由微软创立和保护的开源测试工具,为古代 web 应用程序提供牢靠的端到端测试。当团队更新后端和前端更新时,他们心愿博客应用程序的次要性能不会被毁坏。他们设置了几个 Playwright 测试,并将其集成到 CI 管道中,这样一旦有了拉取申请,管道就会运行。

Power Apps 集成

应用 Azure API Management(APIM),你能够轻松地应用 .NET APIs,让其反对更多的服务和应用程序,包含 Power Apps。在 .NET Conf 2022 中, 咱们展现了:通过 APIs 浅层的 .NET APIs,Power Apps 可能对批准和回绝新的播客提交进行分类。当初 repo 中包含能够由你本人部署的 Power Apps。

GitHub 存储库有老手领导,介绍了如何轻松地让整个应用程序在本地运行,只需一个简略的命令就能进行开发。此外,你能够通过在克隆的 repo 中设置一些 GitHub secrets 来用 GitHub Actions 实现残缺的继续集成和部署管道,将整个解决方案部署到 Azure 平台上。除了运行应用程序,你还能够在老手领导中找到 .NET Conf 的所有 demo。

咱们将持续为应用程序增加新性能,也会关注你所感兴趣的内容以及你正在应用此示例架构构建的内容。有任何反馈,请返回 GitHub 讨论组。

点我返回原博客,获取相干链接、文档和视频~

正文完
 0