.NET 帮助

.NET Aspire(针对开发者的工作原理)

发布 2024年一月4日
分享:

.NET Aspire 是一个决定性的云就绪堆栈框架,专为构建可观察、生产就绪的分布式应用程序而量身定制。Aspire 通过一组 NuGet 包提供,有效地解决了各种云原生服务发现问题,并旨在提供一致的设置模式。在.NET 云原生应用程序领域,规范涉及分布式应用程序中更小、相互关联的组件或微服务,脱离了传统的单体代码结构。这些应用程序通常依赖数据库、消息系统、云资源和缓存等众多服务。

在这种情况下,分布式应用会利用跨越多个节点的计算资源,例如在不同主机上运行的容器。跨网络边界的有效通信对于这些节点协同向终端用户提供响应至关重要。具体来说,云原生分布式应用是分布式应用中的一个独特类别,它充分利用了云原生应用基础设施固有的可扩展性、弹性和可管理性。

在本文中,我们将讨论 .NET Aspire 组件来创建网络应用程序。此外,我们还将使用 IronPDF 在 Aspire .NET 项目组件中创建和下载 PDF 文件。

1..NET Aspire 简介

.NET Aspire .NET云应用程序是一项有目的的举措,旨在增强.NET生态系统中.NET云原生应用程序的开发体验。它引入了一套具有凝聚力和意见的工具和设计模式,旨在促进分布式应用程序的无缝构建和运行。.NET Aspire 入门应用程序的核心目标包括

  1. 协调: .NET Aspire 协调辅助工具具有强大的功能,可协调多项目应用程序及其错综复杂的依赖关系。该功能可确保.NET项目不同组件之间的顺利执行和无缝连接。

  2. 组件: .NET Aspire 协调提供的组件封装在 NuGet 包中,代表了广泛使用的服务,如本地 Redis 容器资源或 Postgres。这些组件具有标准化接口,可确保与您的应用程序进行一致、无缝的集成。通过利用这些预打包组件,开发人员可以加快开发过程,并使用 .NET Aspire 项目模板保持更高水平的互操作性和可配置的云原生应用程序。

  3. 工具:.NET Aspire 初始模板包含一套全面的工具,专门用于简化开发工作流程。项目模板和工具体验经过深思熟虑后集成到了 Visual Studio 和 .NET CLI 中,使开发人员能够毫不费力地创建 .NET Aspire 应用程序并与之交互。这种包容性的工具框架提高了工作效率,并为开发和管理 .NET Aspire 应用程序配置和项目模板提供了一个统一的环境。

从本质上讲,.NET Aspire 是一个整体解决方案,可解决特定云原生问题的关键方面,如协调、组件集成和工具,所有这些都旨在提高构建和部署.NET 云原生应用程序的效率和一致性。

2.开始使用 .NET Aspire

在使用 .NET Aspire 之前,请确保在本地安装了以下组件:

  1. .NET 8.0: 确保在系统中安装了 .NET 8.0。

  2. .NET Aspire 工作负载: 通过使用 VS 安装程序或执行 "dotnet workload install aspire "命令获取 .NET Aspire 工作负载。

  3. 集成开发人员环境 (IDE) 或代码编辑器: 应事先在系统上安装 Visual Studio 2022。

如果满足了所有这些要求,您就可以开始开发第一个处理应用程序的 .NET Aspire 组件了。

3.创建一个新的 .NET Aspire 项目

要创建 .NET Aspire 应用程序,请按照以下步骤操作。

1.打开 Visual Studio,点击创建新项目。

2.这时会出现一个新窗口。在新窗口的搜索栏中搜索 Aspire。

3.下面会出现一个列表,从列表中选择 Aspire Starter apphost 项目和软件包引用,然后单击 "下一步"。

4.这时会出现一个新窗口。在新窗口中写入项目名称,然后点击下一步。

5.在该窗口中选择目标框架,然后点击创建按钮。

几秒钟后,.NET Aspire 应用程序就会创建完成,您就可以开始开发和定制了。

4.运行和测试 .NET Aspire 应用程序

项目创建完成后,只需单击运行按钮,创建构建需要一些时间,之后将打开 Aspire Web 应用程序主页的网页。

该主页将包含我们的 .NET Aspire Cloud-native 应用程序栈,用于构建可观察的生产就绪型 .NET Aspire 启动应用程序。

.NET Aspire(如何为开发人员工作):图 1 - Aspire 主页

现在点击与 .NET 交互的链接。现在点击 Web 前端项目和软件包引用链接。它将以不同的端口名称打开新网页。

.NET Aspire(如何为开发人员工作):图 2 - 新网页

5.介绍 IronPDF C#

IronPDF 是一款功能强大、用途广泛的 C# 库,可帮助开发人员毫不费力地将高级 PDF 生成和处理功能集成到其应用程序中。该库由 Iron Software 开发,功能丰富,提供了一套全面的工具,可直接在 C# 应用程序中创建、修改和渲染 PDF 文档。

使用 IronPDF,开发人员可以从 HTML、图像和现有文档等各种来源无缝生成 PDF,同时保持对格式和布局的精确控制。无论是创建动态报表、将 HTML 内容转换为 PDF,还是为现有文档添加注释,IronPDF 都能简化 PDF 处理流程,使其成为 C# 开发人员为满足文档管理需求而寻求可靠高效解决方案的宝贵资产。

5.1.安装 IronPDF

要无缝安装 IronPDF,请使用 Visual Studio 中的 NuGet 包管理器。指定的安装包名为 IronPDF。只需将以下命令复制并粘贴到软件包管理器控制台,然后点击回车即可:

Install-Package IronPdf

5.2.将 IronPDF 与 Aspire 组件集成

将 IronPDF 与 Aspire 组件集成与将 IronPDF 与 Blazor Web 应用程序集成是一样的,因为 Aspire 组件可以将 Blazor 应用程序作为组件使用。在本代码示例中,我们将修改计数器页面的代码,以创建并下载 PDF 文件。

打开 counter.razor 文件,用下面的代码替换代码。

@page "/PrintPDF"
@rendermode InteractiveServer
@using IronPdf
<PageTitle>Print PDF</PageTitle>
<h1>IronPDF</h1>
<p role="status">Click on the button below to create and download the PDF file </p>
<button class="btn btn-primary" @onclick="IncrementCount">Print</button>
@code {
    private int currentCount = 0;
    private void IncrementCount()
    {
        var renderer = new ChromePdfRenderer();
        // Create a PDF from a HTML string using C#
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        // Export to a file or Stream
        JSRuntime.InvokeVoidAsync("saveAsFile", "output.pdf", Convert.ToBase64String(pdf.Stream.ToArray()));
    }
}
@page "/PrintPDF"
@rendermode InteractiveServer
@using IronPdf
<PageTitle>Print PDF</PageTitle>
<h1>IronPDF</h1>
<p role="status">Click on the button below to create and download the PDF file </p>
<button class="btn btn-primary" @onclick="IncrementCount">Print</button>
@code {
    private int currentCount = 0;
    private void IncrementCount()
    {
        var renderer = new ChromePdfRenderer();
        // Create a PDF from a HTML string using C#
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        // Export to a file or Stream
        JSRuntime.InvokeVoidAsync("saveAsFile", "output.pdf", Convert.ToBase64String(pdf.Stream.ToArray()));
    }
}
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: @page "/PrintPDF" @rendermode InteractiveServer using IronPdf <PageTitle> Print PDF</PageTitle> <h1> IronPDF</h1> <p role="status"> Click on the button below to create and download the PDF file </p> <button class="btn btn-primary" onclick="IncrementCount"> Print</button> @code
"btn btn-primary" onclick="IncrementCount"> Print</button> code
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Friend @page "/PrintPDF" @rendermode InteractiveServer using IronPdf <PageTitle> Print PDF</PageTitle> <h1> IronPDF</h1> <p role="status"> Click on the button below to create and download the PDF file </p> <button Class="btn btn-primary" onclick
"status"> Click on the button below [to] create [and] download the PDF file </p> <button Class="btn btn-primary" onclick
Private Private Friend page "/PrintPDF" rendermode InteractiveServer [using] IronPdf (Of PageTitle) Print PDF</PageTitle> (Of h1) IronPDF</h1> <p role="status"> Click on the button below [to] create [and] download the PDF file </p> <button Class
	Private currentCount As Integer = 0
	Private Sub IncrementCount()
		Dim renderer = New ChromePdfRenderer()
		' Create a PDF from a HTML string using C#
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
		' Export to a file or Stream
		JSRuntime.InvokeVoidAsync("saveAsFile", "output.pdf", Convert.ToBase64String(pdf.Stream.ToArray()))
	End Sub
End Class
VB   C#

然后编写 JavaScript 代码来下载 PDF 文件。将代码写入 HTML body 标签范围内的 script 标签中。下面是要添加到项目中的代码。

<script type="text/javascript">
    function saveAsFile(filename, bytesBase64) {
        if (navigator.msSaveBlob) {
            //Download document in Edge browser
            var data = window.atob(bytesBase64);
            var bytes = new Uint8Array(data.length);
            for (var i = 0; i < data.length; i++) {
                bytes [i] = data.charCodeAt(i);
            }
            var blob = new Blob([bytes.buffer], { type: "application/octet-stream" });
            navigator.msSaveBlob(blob, filename);
            window.navigator.msSaveOrOpenBlob(blob);
        }
        else {
            var link = document.createElement('a');
            link.download = filename;
            link.href = "data:application/octet-stream;base64," + bytesBase64;
            document.body.appendChild(link); // Needed for Firefox
            link.click();
            document.body.removeChild(link);
        }
    }
</script>
<script type="text/javascript">
    function saveAsFile(filename, bytesBase64) {
        if (navigator.msSaveBlob) {
            //Download document in Edge browser
            var data = window.atob(bytesBase64);
            var bytes = new Uint8Array(data.length);
            for (var i = 0; i < data.length; i++) {
                bytes [i] = data.charCodeAt(i);
            }
            var blob = new Blob([bytes.buffer], { type: "application/octet-stream" });
            navigator.msSaveBlob(blob, filename);
            window.navigator.msSaveOrOpenBlob(blob);
        }
        else {
            var link = document.createElement('a');
            link.download = filename;
            link.href = "data:application/octet-stream;base64," + bytesBase64;
            document.body.appendChild(link); // Needed for Firefox
            link.click();
            document.body.removeChild(link);
        }
    }
</script>
<script type="text/javascript"> [function] saveAsFile(filename, bytesBase64)
If True Then
		If navigator.msSaveBlob Then
			'Download document in Edge browser
			Dim data = window.atob(bytesBase64)
			Dim bytes = New Uint8Array(data.length)
			For i = 0 To data.length - 1
				bytes (i) = data.charCodeAt(i)
			Next i
			Dim blob As New Blob((bytes.buffer), { type:= "application/octet-stream" })
			navigator.msSaveBlob(blob, filename)
			window.navigator.msSaveOrOpenBlob(blob)
		Else
			Dim link = document.createElement("a"c)
			link.download = filename
			link.href = "data:application/octet-stream;base64," & bytesBase64
			document.body.appendChild(link) ' Needed for Firefox
			link.click()
			document.body.removeChild(link)
		End If
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'</script>
VB   C#

运行代码后,效果如下图所示。

.NET Aspire(如何为开发人员工作):图 3 - Blazor

要创建并下载 PDF 文件,请单击 "打印 "按钮。它将创建并下载名为 output.pdf 文件的 PDF 文件。

.NET Aspire(如何为开发人员工作):图 4 - PDF 下载

6.结论

.NET Aspire 是一个重要的框架,专门用于在云环境中开发健壮、可观察和分布式应用程序。通过提供一套具有凝聚力的工具和设计模式,.NET Aspire 简化了与构建云原生应用程序相关的复杂性,提供了无缝协调、组件集成和用户友好的工具框架。.NET Aspire 注重可扩展性、弹性和可管理性,符合向微服务和分布式架构转变的模式。

当开发人员开始使用 .NET Aspire 时,他们将获得一整套功能,从协调的多项目应用程序到封装在 NuGet 包中的标准化组件。通过遵守先决条件并遵循指南中列出的简单步骤,开发人员可以毫不费力地创建、运行和测试 .NET Aspire 应用程序。

此外,将 IronPDF 集成到 Aspire 组件中展示了该框架的可扩展性和多功能性,使开发人员能够将高级 PDF 生成和处理功能无缝集成到他们的云原生应用程序中。总之,.NET Aspire 以其明确的目标和用户友好的方法,成为开发人员在 .NET 生态系统中构建和部署云原生应用程序时寻求高效一致的解决方案的宝贵资产。

有关使用 IronPDF 使用 Blazor 网络应用程序,请访问 这里.要获得 IronPDF 的免费试用版,请访问此处获取您的 免费试用许可证.

< 前一页
C# 受保护的(开发人员如何使用)
下一步 >
Automapper C#(如何为开发人员工作)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >