在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在現代軟體開發的許多領域中,創建動態、數據驅動、豐富的PDF文件是一個典型的需求。企業非常依賴其快速生成高質量PDF的能力,無論是用於創建賬單、報告還是文檔。然而,隨著它們變得愈加複雜和大規模,追蹤和理解PDF生成過程的效率變得至關重要,以維護應用程序的健康並確保用戶滿意度。
本文旨在討論開發人員如何通過利用IronPDF和OpenTelemetry.NET的功能來改進PDF生成操作,並提供有關應用程序性能的重要見解。我們將探索這兩種技術的特點和優勢,並展示它們如何協同工作,以優化在.NET應用程序中PDF的創建和監控。
OpenTelemetry 是一個供應商中立的觀測框架,專為雲原生應用程式而設計。OpenTelemetry 的自動化儀表提供單一 API,用於收集包括日誌、追踪和指標在內的遙測信息。使用這些廣泛的數據,開發者可以有效地調試問題,確定性能瓶頸,並全面了解程式行為。OpenTelemetry 支援自動和手動儀表,以實現全面且靈活的遙測數據收集。
將 OpenTelemetry 集成到您的 .NET 應用程序中可以帶來以下優勢:
需要在您的應用程式中配置 OpenTelemetry;對於 ASP.NET Core 應用程式,這通常是在 Startup.cs
文件的 ConfigureServices
方法中完成的。以下是 Jaeger exporter 配置的示例:
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
builder.Services.AddOpenTelemetry().WithTracing(options =>
{
// Configure Jaeger exporter
// serviceName we can read from environment variables
options
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName))
.AddAspNetCoreInstrumentation().AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
builder.Services.AddOpenTelemetry().WithTracing(options =>
{
// Configure Jaeger exporter
// serviceName we can read from environment variables
options
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName))
.AddAspNetCoreInstrumentation().AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}
Imports OpenTelemetry.Trace
Imports OpenTelemetry.Exporter.Jaeger
Imports OpenTelemetry.Resources
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure OpenTelemetry
builder.Services.AddOpenTelemetry().WithTracing(Sub(options)
' Configure Jaeger exporter
' serviceName we can read from environment variables
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName)).AddAspNetCoreInstrumentation().AddJaegerExporter(Sub(opt)
opt.AgentHost = "localhost" ' Jaeger agent host
opt.AgentPort = 14250 ' Jaeger agent port
End Sub)
End Sub)
' Other service configurations...
End Sub
將您的服務名稱替換為 serviceName
。根據您的 Jaeger 配置選項,更改 Jaeger 代理主機和端口。
您必須在 ASP.NET Core 應用程式中包含 OpenTelemetry 中間件,才能自動監測到來的 HTTP 請求。在 Startup.cs
檔案的 Configure
方法中,添加中間件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add OpenTelemetry middleware if we are using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add OpenTelemetry middleware if we are using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Add OpenTelemetry middleware if we are using Prometheus
app.UseHttpMetrics()
' Other middleware configurations...
End Sub
一切設置完成後,OpenTelemetry 將開始追蹤進入的 HTTP 請求,並將遙測信息自行發送到配置的 Jaeger 後端。
您可以在 Jaeger 後端檢查追蹤以確認 OpenTelemetry 是否正常運作。打開 Jaeger 用戶界面 (通常可在 http://localhost:16686
提供 Jaeger UI) 並查找與您的服務相關的痕跡。
OpenTelemetry 並不是基本儀表化的必需品,但它可以與其他後端操作系統整合來存儲和處理遙測數據。受歡迎的選項包括正式支持的操作系統:
流行的 .NET 套件 IronPDF 允許您在 .NET 程式中創建、編輯和渲染 PDF 文件。處理 PDF 的功能繁多,包括:將 HTML 頁面轉換為 PDF;從 PDF 中提取文本和圖像;向現有 PDF 文檔添加文本、圖像和形狀;從 HTML 內容、照片或原始數據生成 PDF。
IronPDF 的兩個主要優點是它的易用性和簡單性。由於其直觀的 API 和全面的文檔,開發人員可以輕鬆地在其 .NET 項目中開始創建 PDF。IronPDF 的效率和速度是其他特點,這有助於開發人員快速有效地創建高質量的 PDF 文件。
IronPDF 的一些好處:
不同的 OpenTelemetry 元件有多個 NuGet 套件可用。根據您的需求,您可以安裝所需的套件。要將遙測數據發送到觀察性後端 (例如 Jaeger、Zipkin 或 Prometheus)你至少需要 OpenTelemetry 套件,以及適用於您的應用框架的儀器包 (例如 ASP.NET Core),和一個導出程序包。此外,確保在您的項目中安裝了 IronPDF 包。要安裝它,請使用 NuGet 程序包管理器控制台:
Install-Package OpenTelemetry
Install-Package OpenTelemetry.Instrumentation.AspNetCore
Install-Package OpenTelemetry.Exporter.Jaeger
Install-Package IronPdf
打開您的 ASP.NET Core 應用程式的 Startup.cs
檔案以進入 ConfigureServices
函數。 要設置 IronPDF,請包含以下程式碼。
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}
Imports IronPdf
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure IronPDF
services.AddSingleton(Of HtmlToPdf)()
' Other service configurations...
End Sub
此代碼確保通過將 IronPDF 的 HtmlToPdf
服務配置為單例,應用程序僅創建和使用一個 HtmlToPdf
實例。
您可以通過將 OpenTelemetry.NET 與 IronPDF 集成來跟蹤並觀察您 .NET 應用程序中的 PDF 生成過程。讓我們深入研究程式碼示例,一步一步地逐步講解每個步驟:
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<WeatherForecastController> _logger;
private readonly Tracer _tracer;
public WeatherForecastController(ILogger<WeatherForecastController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
}
[HttpGet]
public FileContentResult Generate()
{
string fileName = "Sample.pdf";
var stream = GeneratePdf("Hello IronPDF");
return new FileContentResult(stream, "application/octet-stream")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
var pdfBytes = pdfDocument.BinaryData;
return pdfBytes;
}
}
}
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<WeatherForecastController> _logger;
private readonly Tracer _tracer;
public WeatherForecastController(ILogger<WeatherForecastController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
}
[HttpGet]
public FileContentResult Generate()
{
string fileName = "Sample.pdf";
var stream = GeneratePdf("Hello IronPDF");
return new FileContentResult(stream, "application/octet-stream")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
var pdfBytes = pdfDocument.BinaryData;
return pdfBytes;
}
}
}
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports System.Net
Imports System.Net.Http.Headers
Namespace DemoWebApplication.Controllers
<ApiController>
<Route("[controller]")>
Public Class DemoController
Inherits ControllerBase
Private ReadOnly _htmlToPdf As HtmlToPdf
Private ReadOnly _logger As ILogger(Of WeatherForecastController)
Private ReadOnly _tracer As Tracer
Private Function WeatherForecastController(ByVal logger As ILogger(Of WeatherForecastController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider) As Public
_tracer = tracerProvider.GetTracer("Demo")
_htmlToPdf = htmlToPdf
End Function
<HttpGet>
Public Function Generate() As FileContentResult
Dim fileName As String = "Sample.pdf"
Dim stream = GeneratePdf("Hello IronPDF")
Return New FileContentResult(stream, "application/octet-stream") With {.FileDownloadName = fileName}
End Function
Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
Using activity = _tracer.StartActiveSpan("PDF Generation")
Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)
Dim pdfBytes = pdfDocument.BinaryData
Return pdfBytes
End Using
End Function
End Class
End Namespace
若要為我們的應用程式產生追蹤器實例,我們注入 TracerProvider
服務。由 Generate
方法創建的 OpenTelemetry 活動稱為「PDF 生成」,用以象徵目前正在進行的工作。我們在這個活動中模擬一些工作。 (替換您自己的邏輯). 我們建立了一個名為 work_duration_ms
的柱狀圖度量來監控工作的毫秒長度。我們向度量中添加數據點,標記為「Demo」,且值為「PDF Generation」,並記錄持續時間。 (在這種情況下為 1000 毫秒). 標籤為分析提供了額外的上下文層。
從上述源代碼生成的 PDF 輸出:
以下是來自 Jaeger UI 生成的追蹤結果畫面:
OpenTelemetry 為 .NET 應用程式性能優化和健康監控帶來了革命性的改變。它通過提供一種供應商中立和標準化的方法來收集、分析和導出遙測數據,使開發者能夠全面了解其應用程式的內部運作。 (度量、追蹤和日誌).
通過將 OpenTelemetry.NET 與 IronPDF 集成,開發人員可以改進生成 PDF 的工作流程,並獲取有關其應用程式性能的深入見解。通過利用 OpenTelemetry.NET 實現手動檢測 PDF 生成過程,開發人員可以跟踪執行路徑、跟踪性能指標並找出需要優化的區域。此外,將遙測數據導出到可觀察性平台,使集中式監控度量收集和分析成為可能,使開發人員能夠保持其應用程式的健康性並提供完美的用戶體驗。
OpenTelemetry.NET 實現和 IronPDF 的集成可以增強開發人員生成 PDF 的工作流程,並保證 .NET 應用程式的可擴展性、性能和可靠性。這些技術的集成有助於開發人員滿足現代軟體開發的需求並產生卓越的結果,無論是生成發票、報告還是文件。
作為一個套件購買,IronPDF 價格合理,並包括終身許可證。該套件僅需 $749,是多個系統的一次性費用。它為許可證持有人提供全天候的線上工程支持。請訪問 網站 有關收費的更多詳細信息,請訪問此 網站 了解更多有關 Iron Software 生產的產品的資訊。