ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
現代のアプリケーション開発では、大規模なタスクを処理するためにバックグラウンドタスクを処理する必要があります。このようなシナリオでは、バックグラウンドジョブハンドラーを使用して複数のジョブを実行する必要があります。 C# .NET Coreアプリケーションのための多くのジョブハンドラーがありますが、その一つにバックグラウンドの親ジョブハンドラーであるHangfireがあります。このブログでは、Hangfireのバックグラウンドジョブについて学び、他のパッケージとどのように使用するかについて説明します。PDF生成のためのIronPDFバックグラウンドでPDFドキュメントを生成するために。
ハングファイアASP.NET Core または .NET Core 6 Web API アプリケーションにおいて、バックグラウンド処理の実装を簡素化するために、バックグラウンドジョブの管理と実行において信頼性が高く、柔軟なフレームワークを提供します。 HangfireはNuGetパッケージであり、次のように .NET CLI を使用してインストールできます。
dotnet add package Hangfire --version 1.8.6
Hangfireについて学ぶために、簡単な.NET Core APIアプリケーションを作成し、CLIを使用してHangfireをインストールしましょう。
dotnet new webapi -n HangfireDemo
cd HangfireDemo
dotnet build
dotnet add package Hangfire --version 1.8.6
dotnet build
ここでは .NET CLI を使用して簡単な天気 REST API を作成しています。 最初の行は、HangfireDemo という名前の Core Web API プロジェクトを作成します。(また、ASP.NET Coreを作成することもできます)APIエンドポイントを実行するために。 2行目は、新しく作成したフォルダー "HangfireDemo" に移動し、プロジェクトをビルドするためのものです。 次に、Hangfire NuGet パッケージをプロジェクトに追加し、再度ビルドしました。 その後、お好みのエディター、Visual Studio 2022 または JetBrains Rider でプロジェクトを開くことができます。 プロジェクトを実行すると、以下のようにSwaggerを見ることができます。
ここでは、日付、概要、および温度を返す天気のGET APIを確認できます。
では、Hangfire バックグラウンドジョブプロセッサを追加しましょう。 Visual Studioでプロジェクトを開く。
アプリケーション内でHangfireを設定します。これは通常、Startup.csファイル内で行われます。これにはジョブストレージの設定とHangfireサーバーの初期化が含まれます。
// Startup.cs
using Hangfire;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add Hangfire services
services.AddHangfire(config => config.UseSqlServerStorage("your_connection_string"));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Configure Hangfire
app.UseHangfireServer();
app.UseHangfireDashboard();
// Your other configuration settings
}
}
// Startup.cs
using Hangfire;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add Hangfire services
services.AddHangfire(config => config.UseSqlServerStorage("your_connection_string"));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Configure Hangfire
app.UseHangfireServer();
app.UseHangfireDashboard();
// Your other configuration settings
}
}
' Startup.cs
Imports Hangfire
Public Class Startup
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Add Hangfire services
services.AddHangfire(Function(config) config.UseSqlServerStorage("your_connection_string"))
End Sub
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IHostingEnvironment)
' Configure Hangfire
app.UseHangfireServer()
app.UseHangfireDashboard()
' Your other configuration settings
End Sub
End Class
ConfigureServicesは、Hangfireの新しく作成されたジョブを保存するためのストレージを追加するために使用されます。 ここではSQL Serverデータベースが使用されています。 SQL Serverの接続文字列は"your_connection_string"に置き換えてください。 インメモリストレージは、Hangfire.InMemoryを使用して行うこともできます。
dotnet add package Hangfire.InMemory --version 0.6.0
置き換える
services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });
services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });
services.AddHangfire(Sub(configuration)
configuration.UseInMemoryStorage()
End Sub)
バックグラウンドジョブとして実行したいメソッドを定義します。 これらのメソッドは、引数なしのコンストラクタを持つクラスの静的メソッドまたはインスタンスメソッドである必要があります。 ジョブは定期的なジョブとして実行することも、多くのジョブを実行することもできます。
public class MyBackgroundJob
{
public void ProcessJob()
{
// Your background job logic, recurring job or multiple jobs
Console.WriteLine("Background job is running...");
}
}
public class MyBackgroundJob
{
public void ProcessJob()
{
// Your background job logic, recurring job or multiple jobs
Console.WriteLine("Background job is running...");
}
}
Public Class MyBackgroundJob
Public Sub ProcessJob()
' Your background job logic, recurring job or multiple jobs
Console.WriteLine("Background job is running...")
End Sub
End Class
Hangfire API を使用してバックグラウンドジョブをエンキューします。 特定の時間、遅延後、または定期的にバックグラウンドジョブをスケジュールして実行することができます。
// Enqueue a job to run immediately
BackgroundJob.Enqueue<MyBackgroundJob>(x => x.ProcessJob());
// Schedule a job to run after 5 min delay, delayed job
BackgroundJob.Schedule<MyBackgroundJob>(x => x.ProcessJob(), TimeSpan.FromMinutes(5));
// Schedule a recurring job / recurring jobs using job Id
RecurringJob.AddOrUpdate<MyBackgroundJob>("job Id", x => x.ProcessJob(), Cron.Daily);
// Enqueue a job to run immediately
BackgroundJob.Enqueue<MyBackgroundJob>(x => x.ProcessJob());
// Schedule a job to run after 5 min delay, delayed job
BackgroundJob.Schedule<MyBackgroundJob>(x => x.ProcessJob(), TimeSpan.FromMinutes(5));
// Schedule a recurring job / recurring jobs using job Id
RecurringJob.AddOrUpdate<MyBackgroundJob>("job Id", x => x.ProcessJob(), Cron.Daily);
' Enqueue a job to run immediately
BackgroundJob.Enqueue(Of MyBackgroundJob)(Function(x) x.ProcessJob())
' Schedule a job to run after 5 min delay, delayed job
BackgroundJob.Schedule(Of MyBackgroundJob)(Function(x) x.ProcessJob(), TimeSpan.FromMinutes(5))
' Schedule a recurring job / recurring jobs using job Id
RecurringJob.AddOrUpdate(Of MyBackgroundJob)("job Id", Function(x) x.ProcessJob(), Cron.Daily)
Hangfireのダッシュボードとサーバーは、Configureメソッドに追加できます。
// Run Hangfire server
app.UseHangfireServer();
app.UseHangfireDashboard();
// Run Hangfire server
app.UseHangfireServer();
app.UseHangfireDashboard();
' Run Hangfire server
app.UseHangfireServer()
app.UseHangfireDashboard()
サーバーは、ConfigureServices にも追加できます。
services.AddHangfireServer();
services.AddHangfireServer();
services.AddHangfireServer()
//Fire and forget job / Fire and forget jobs are executed only once and almost immediately after creation.
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!")); //jobId for Fire and forget job
//Fire and forget job / Fire and forget jobs are executed only once and almost immediately after creation.
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!")); //jobId for Fire and forget job
'Fire and forget job / Fire and forget jobs are executed only once and almost immediately after creation.
Dim jobId = BackgroundJob.Enqueue(Sub() Console.WriteLine("Fire-and-forget!")) 'jobId for Fire and forget job
//Recurring jobs fire many times on the specified CRON schedule.
RecurringJob.AddOrUpdate( "myrecurringjob",() => Console.WriteLine("Recurring!"),Cron.Daily);
//Recurring jobs fire many times on the specified CRON schedule.
RecurringJob.AddOrUpdate( "myrecurringjob",() => Console.WriteLine("Recurring!"),Cron.Daily);
'Recurring jobs fire many times on the specified CRON schedule.
RecurringJob.AddOrUpdate("myrecurringjob",Sub() Console.WriteLine("Recurring!"),Cron.Daily)
//Delayed jobs are executed only once too, but not immediately, after a certain specific interval.
var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),
TimeSpan.FromDays(7));
//Delayed jobs are executed only once too, but not immediately, after a certain specific interval.
var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),
TimeSpan.FromDays(7));
'Delayed jobs are executed only once too, but not immediately, after a certain specific interval.
Dim jobId = BackgroundJob.Schedule(Sub() Console.WriteLine("Delayed!"), TimeSpan.FromDays(7))
//Continuation jobs are executed when its parent job has been finished, immediate child job
BackgroundJob.ContinueJobWith(jobId,() => Console.WriteLine("Continuation!"));
//Continuation jobs are executed when its parent job has been finished, immediate child job
BackgroundJob.ContinueJobWith(jobId,() => Console.WriteLine("Continuation!"));
'Continuation jobs are executed when its parent job has been finished, immediate child job
BackgroundJob.ContinueJobWith(jobId,Sub() Console.WriteLine("Continuation!"))
//Batch is a group of background jobs that is created atomically and considered as a single entity. Two jobs can be run as below.
var batchId = BatchJob.StartNew(x =>
{
x.Enqueue(() => Console.WriteLine("Job 1"));
x.Enqueue(() => Console.WriteLine("Job 2"));
});
//Batch is a group of background jobs that is created atomically and considered as a single entity. Two jobs can be run as below.
var batchId = BatchJob.StartNew(x =>
{
x.Enqueue(() => Console.WriteLine("Job 1"));
x.Enqueue(() => Console.WriteLine("Job 2"));
});
'Batch is a group of background jobs that is created atomically and considered as a single entity. Two jobs can be run as below.
Dim batchId = BatchJob.StartNew(Sub(x)
x.Enqueue(Sub() Console.WriteLine("Job 1"))
x.Enqueue(Sub() Console.WriteLine("Job 2"))
End Sub)
Batch continuation is fired when all background jobs in a parent batch are finished.
BatchJob.ContinueBatchWith(batchId, x =>
{
x.Enqueue(() => Console.WriteLine("Last Job"));
});
Batch continuation is fired when all background jobs in a parent batch are finished.
BatchJob.ContinueBatchWith(batchId, x =>
{
x.Enqueue(() => Console.WriteLine("Last Job"));
});
Dim tempVar As Boolean = TypeOf continuation Is fired
Dim [when] As fired = If(tempVar, CType(continuation, fired), Nothing)
Batch tempVar all background jobs in a parent batch are finished.BatchJob.ContinueBatchWith(batchId, Sub(x)
x.Enqueue(Sub() Console.WriteLine("Last Job"))
End Sub)
Hangfire Dashboardでは、バックグラウンドジョブに関するすべての情報を見つけることができます。 それはOWINミドルウェアとして書かれています。(もし、OWINに詳しくない場合も心配しないでください。)以下のコンテンツを日本語に翻訳します:
あなたのASP.NET、ASP.NET MVC、Nancy、およびServiceStackアプリケーションにそのまま組み込んで使用することができます。また、OWINセルフホストコンソールアプリケーションまたはWindowsサービス内でダッシュボードをホストする機能。
ダッシュボードがビューに有効になっている場合、ダッシュボードは /hangfire/ 拡張にあります。 このダッシュボードでは、バックグラウンド実行ジョブの管理、バックグラウンドジョブのスケジュール設定、ファイア・アンド・フォーゲットジョブの表示、および定期的なジョブの表示が可能です。 ジョブIDを使用してジョブを識別できます。
以下に成功したジョブが表示されます。
既に設定された構成に基づいて、あなたのアプリケーションが実行されると、Hangfireがバックグラウンドジョブの処理を行います。
より高度な設定オプションや機能については、Hangfireのドキュメントを確認してください:Hangfireドキュメントおよび完全なコードはで見つけることができますGitHub Hangfireデモ.
IronPDF for .NET PDFジェネレーションですNuGet パッケージ からIronソフトウェアのPDFライブラリPDFドキュメントの読み取りと生成をサポートします。 それは、スタイル情報を持つフォーマット済みのドキュメントを簡単にPDFに変換できます。 IronPDFはHTMLコンテンツから簡単にPDFを生成することができます。 それは、URLからHTMLをダウンロードしてPDFを生成することができます。
IronPDFの主な魅力はそのHTMLをPDFに変換レイアウトとスタイルを保つ関数。 それはウェブコンテンツからPDFを作成でき、レポート、請求書、ドキュメントに最適です。 この機能は、HTMLファイル、URL、およびHTML文字列をPDFに変換することをサポートします。
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class
今日から無料トライアルでIronPDFをあなたのプロジェクトで使い始めましょう。
Hangfire .NET プロジェクトに IronPDF を統合するために、NuGet パッケージ マネージャーを使用する手順は次のとおりです:
Visual Studioを開き、ソリューションエクスプローラーでプロジェクトを右クリックします。
コンテキストメニューから「NuGetパッケージの管理...」を選択してください。
「参照」タブに移動して、「IronPDF」を検索してください。
検索結果からIronPDFライブラリを選択し、インストールボタンをクリックします。
ライセンス契約のプロンプトをすべて受け入れます。
プロジェクトにIronPDFをパッケージ マネージャー コンソール経由で含めたい場合は、パッケージ マネージャー コンソールで以下のコマンドを実行してください:
Install-Package IronPdf
それは、プロジェクトにIronPDFを取得してインストールします。
IronPDFの機能、互換性、その他のダウンロードオプションに関する詳細な概要については、NuGetウェブサイトのIronPDFページ https://www.nuget.org/packages/IronPdf をご覧ください。
代わりに、IronPDFのdllファイルをプロジェクトに直接組み込むことができます。DLLを含むZIPファイルを次のリンクからダウンロードしてくださいIronPDF 直接ダウンロード. 解凍して、プロジェクトにDLLを含めてください。
今度は、HTTPリクエストパイプラインのウェブサイトをPDFファイルとしてダウンロードするためのバックグラウンド処理ジョブを追加するようにアプリケーションを修正しましょう。
namespace HangfireDemo.Core;
public class PdfGenerationJob
{
public void Start(string website)
{
// Create a PDF from any existing web page
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf(website);
var filePath = AppContext.BaseDirectory + "result.pdf";
pdf.SaveAs(filePath);
}
}
namespace HangfireDemo.Core;
public class PdfGenerationJob
{
public void Start(string website)
{
// Create a PDF from any existing web page
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf(website);
var filePath = AppContext.BaseDirectory + "result.pdf";
pdf.SaveAs(filePath);
}
}
Namespace HangfireDemo.Core
Public Class PdfGenerationJob
Public Sub Start(ByVal website As String)
' Create a PDF from any existing web page
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderUrlAsPdf(website)
Dim filePath = AppContext.BaseDirectory & "result.pdf"
pdf.SaveAs(filePath)
End Sub
End Class
End Namespace
IronPDFには、URLからウェブサイトをダウンロードし、PDFドキュメントとして保存するための組み込みメソッドがあります。 このメソッドを使用して、ジョブの一環としてダウンロードし、一時的な場所に保存します。 このバックグラウンドジョブは、複数のウェブサイトURLを取り込み、PDFとして保存するように変更できます。
次に、PDF生成とダウンロードAPIを公開するためのコントローラーを追加します。
using Hangfire;
using HangfireDemo.Core;
using Microsoft.AspNetCore.Mvc;
namespace HangfireDemo.Controllers;
[ApiController]
[Route("[controller]")]
public class PdfGeneratorController : ControllerBase
{
[HttpGet("request", Name = "Start PDF Generation")]
public void Start([FromQuery] string websiteUrl)
{
BackgroundJob.Enqueue<PdfGenerationJob>(x => x.Start(websiteUrl));
}
[HttpGet("result", Name = "Download PDF Generation")]
public IActionResult WebResult()
{
var filePath = AppContext.BaseDirectory + "result.pdf";
var stream = new FileStream(filePath, FileMode.Open);
return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = "website.pdf" };
}
}
using Hangfire;
using HangfireDemo.Core;
using Microsoft.AspNetCore.Mvc;
namespace HangfireDemo.Controllers;
[ApiController]
[Route("[controller]")]
public class PdfGeneratorController : ControllerBase
{
[HttpGet("request", Name = "Start PDF Generation")]
public void Start([FromQuery] string websiteUrl)
{
BackgroundJob.Enqueue<PdfGenerationJob>(x => x.Start(websiteUrl));
}
[HttpGet("result", Name = "Download PDF Generation")]
public IActionResult WebResult()
{
var filePath = AppContext.BaseDirectory + "result.pdf";
var stream = new FileStream(filePath, FileMode.Open);
return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = "website.pdf" };
}
}
Imports Hangfire
Imports HangfireDemo.Core
Imports Microsoft.AspNetCore.Mvc
Namespace HangfireDemo.Controllers
<ApiController>
<Route("[controller]")>
Public Class PdfGeneratorController
Inherits ControllerBase
<HttpGet("request", Name := "Start PDF Generation")>
Public Sub Start(<FromQuery> ByVal websiteUrl As String)
BackgroundJob.Enqueue(Of PdfGenerationJob)(Function(x) x.Start(websiteUrl))
End Sub
<HttpGet("result", Name := "Download PDF Generation")>
Public Function WebResult() As IActionResult
Dim filePath = AppContext.BaseDirectory & "result.pdf"
Dim stream = New FileStream(filePath, FileMode.Open)
Return New FileStreamResult(stream, "application/octet-stream") With {.FileDownloadName = "website.pdf"}
End Function
End Class
End Namespace
以下に、ウェブサイトのURLを取得して、ダウンロードを開始するためのバックグラウンドジョブを開始するためのAPIを2つ作成しました。 別のAPIは、PDFの結果をダウンロードするためのものです。 APIの例は以下のようになります。
結果は以下のようになります。
上記のコードを透かしなしで動作させるには、ライセンスキーが必要です。 開発者は、次のサイトに登録すると、トライアルライセンスを利用できます。IronPdf 無料トライアル. トライアルライセンスにクレジットカードは必要ありません。 あなたの電子メールIDを提供し、無料トライアルに登録することができます。
HangfireとIronPDFを組み合わせることで、バックグラウンドでPDFを生成およびダウンロードすることができます。 ハングファイアをさまざまなプログラミングパラダイムで使用して、長時間実行されるタスクを処理することができます。 IronPDFは、柔軟で使いやすいPDF生成ソリューションを提供します。 IronPDFについて詳しく知りたい場合は、ドキュメントを参照してください。IronPDF ドキュメント.
また、他のツールについてもご覧いただけますIron Software製品スイートこれにより、コーディングスキルを向上させ、最新のアプリケーション要件を満たすことができます。
9つの .NET API製品 オフィス文書用