IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

Hangfire .NET Core (jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

Nowoczesne tworzenie aplikacji często wymaga przetwarzania zadań w tle, aby obsłużyć ogromne obciążenia. W takich scenariuszach potrzebujemy obsługujących zadań w tle, które są w stanie wykonywać wiele zadań. Jednym z takich obsługujących zadań w tle dla aplikacji C# .NET Core jest Hangfire. W tym blogu dowiemy się, jak zarządzać zadaniami w tle za pomocą Hangfire i jak korzystać z nich z innymi pakietami, takimi jak IronPDF for PDF Generation, aby generować dokumenty PDF w tle.

Hangfire upraszcza implementację przetwarzania w tle w aplikacjach ASP.NET Core lub .NET Core 6 Web API, dostarczając niezawodny i elastyczny framework do zarządzania i wykonywania zadań w tle. Hangfire jest dostępny jako pakiet NuGet i można go zainstalować, używając .NET CLI, jak pokazano poniżej:

dotnet add package Hangfire --version 1.8.6

Implementacja w .NET Core Web API

Aby dowiedzieć się o Hangfire, stwórzmy prostą aplikację API .NET Core i zainstalujmy Hangfire, używając CLI.

dotnet new webapi -n HangfireDemo
cd HangfireDemo
dotnet build
dotnet add package Hangfire --version 1.8.6
dotnet build
SHELL

Tutaj tworzymy proste REST API pogody, używając .NET CLI. Pierwsza linia tworzy projekt .NET Core Web API o nazwie HangfireDemo do wykonania punktów końcowych API. Druga linia nawiguję do właśnie utworzonego folderu "HangfireDemo", a następnie budujemy projekt. Następnie dodajemy pakiet Hangfire NuGet do naszego projektu i ponownie go budujemy. Po tym możesz otworzyć swój projekt w dowolnym edytorze, takim jak Visual Studio 2022 lub JetBrains Rider. Teraz, jeśli uruchomisz projekt, możesz zobaczyć Swagger w następujący sposób:

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 1 - Swagger

Tutaj widzimy GET API pogody, które zwracają datę, podsumowanie i temperaturę.

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 2 - API pogody GET

Teraz dodajmy procesor zadań w tle Hangfire. Otwórz projekt w Visual Studio.

Dodaj procesor zadań Hangfire

Skonfiguruj Hangfire w swojej aplikacji, zazwyczaj w pliku Startup.cs. To obejmuje ustawienie magazynu zadań i inicjalizację serwera Hangfire.

// Startup.cs
using Hangfire;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Hangfire services and use SQL Server as storage option
        services.AddHangfire(config => config.UseSqlServerStorage("your_connection_string"));
        services.AddHangfireServer();
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // Use Hangfire Server and Dashboard for monitoring and managing jobs
        app.UseHangfireServer();
        app.UseHangfireDashboard();
        // Your other configuration settings
    }
}

Metoda ConfigureServices jest używana do dodania magazynu do zapisywania nowo utworzonych zadań Hangfire. Tutaj używana jest baza danych SQL Server. Łącze z bazą danych SQL Server powinno zostać zastąpione "your_connection_string". Można również używać magazynu w pamięci z Hangfire.InMemory.

dotnet add package Hangfire.InMemory --version 0.6.0

I zastąp za pomocą:

services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });

Twórz zadania w tle

Definiuj metody, które chcesz uruchamiać jako zadania w tle. Te metody powinny być statycznymi lub instancyjnymi metodami klasy z konstruktorem bez parametrów. Zadania można uruchomić jako zadania cykliczne, albo można uruchamiać wiele zadań jednocześnie.

public class MyBackgroundJob
{
    public void ProcessJob()
    {
        // Background job logic, can be a recurring job or multiple jobs
        Console.WriteLine("Background job is running...");
    }
}

Dodawanie zadań do kolejki

Umieszczaj zadania w tle w kolejce używając API Hangfire. Możesz zaplanować zadania w tle do uruchomienia w określonym czasie, po opóźnieniu lub regularnie.

// Enqueue a job to run immediately
BackgroundJob.Enqueue<MyBackgroundJob>(x => x.ProcessJob());

// Schedule a job to run after a 5-minute delay
BackgroundJob.Schedule<MyBackgroundJob>(x => x.ProcessJob(), TimeSpan.FromMinutes(5));

// Schedule a recurring job using a job ID
RecurringJob.AddOrUpdate<MyBackgroundJob>("jobId", x => x.ProcessJob(), Cron.Daily);

Pulpit i Serwer Hangfire

Pulpit nawigacyjny Hangfire i serwer można dodać w metodzie Configure do monitorowania zadań w czasie rzeczywistym.

// Run Hangfire server and dashboard
app.UseHangfireServer();
app.UseHangfireDashboard();

Serwer można również dodać w ConfigureServices.

services.AddHangfireServer();

Zadania jednorazowe

// Fire and forget jobs are executed only once and almost immediately after creation.
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!")); // Job ID for fire and forget job

Zadania cykliczne

// Recurring jobs fire many times based on a specified CRON schedule.
RecurringJob.AddOrUpdate("myrecurringjob", () => Console.WriteLine("Recurring!"), Cron.Daily);

Zadania opóźnione

// Delayed jobs are executed only once but after a specified interval.
var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"), TimeSpan.FromDays(7));

Kontynuacje

// Continuation jobs are executed once their parent jobs have completed.
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine("Continuation!"));

Zadanie wsadowe

// Batch is a group of background jobs created atomically and considered as a single entity.
var batchId = BatchJob.StartNew(x =>
{
    x.Enqueue(() => Console.WriteLine("Job 1"));
    x.Enqueue(() => Console.WriteLine("Job 2"));
});

Zadanie wsadowe z kontynuacją

// Batch continuation is fired when all background jobs in a parent batch are finished.
BatchJob.ContinueBatchWith(batchId, x =>
{
    x.Enqueue(() => Console.WriteLine("Last Job"));
});

Pulpit

Panel nawigacyjny Hangfire to miejsce, gdzie możesz znaleźć wszystkie informacje o swoich zadaniach w tle. Jest napisany jako middleware OWIN (jeśli nie jesteś zaznajomiony z OWIN, nie martw się), więc możesz podłączyć go do swoich aplikacji ASP.NET, ASP.NET MVC, Nancy i ServiceStack, a także używać funkcji OWIN Self-Host do hostowania Dashboard wewnątrz aplikacji konsolowych lub usług systemu Windows.

Po włączeniu pulpitu nawigacyjnego jest on dostępny pod rozszerzeniem /hangfire/. W tym panelu nawigacyjnym, możesz zarządzać zadaniami w tle, planować zadania w tle i przeglądać zadania jednorazowe oraz powtarzające się. Zadania mogą być identyfikowane za pomocą ID zadania.

Przetwarzanie na żywo

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 3 - Przetwarzanie zadań na żywo

Udane zadania

Przeglądaj poniżej udane zadania.

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 4 - Ukończone zadania

Zaplanowane zadania

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 5 - Zaplanowane zadania

Kiedy twoja aplikacja działa, Hangfire zadba o przetwarzanie zadań w tle na podstawie skonfigurowanych ustawień.

Pamiętaj, aby sprawdzić dokumentację Hangfire dla bardziej zaawansowanych opcji konfiguracyjnych i funkcji: Hangfire Dokumentacja, a pełny kod można znaleźć na GitHub Hangfire Demo.

Przedstawiamy IronPDF

IronPDF dla .NET Generacja PDF to pakiet NuGet od Biblioteka PDF Iron Software, który pomaga w odczycie i generacji dokumentów PDF. Może łatwo konwertować sformatowane dokumenty z informacjami o stylu do PDF. IronPDF może łatwo generować PDF z treści HTML. Może pobierać HTML z URL i następnie generować PDF.

Główną atrakcją IronPDF jest jego funkcja Konwersja HTML do PDF, która zachowuje układy i style. Może tworzyć PDF z treści web, idealne dla raportów, faktur i dokumentacji. Ta funkcja umożliwia konwersję plików HTML, adresów URL i ciągów znaków HTML do formatu PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 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");

        // 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");

        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Zacznij korzystać z IronPDF

Zainstaluj bibliotekę IronPDF

Instalacja za pomocą menedżera pakietów NuGet

Aby zintegrować IronPDF z Twoim projektem Hangfire .NET używając Menedżera pakietów NuGet, postępuj według tych kroków:

  1. Otwórz Visual Studio i w Eksploratorze rozwiązań kliknij prawym przyciskiem myszy na swoim projekcie.
  2. Wybierz "Zarządzaj pakietami NuGet..." z menu kontekstowego.
  3. Przejdź na kartę Przeglądaj i wyszukaj IronPDF.
  4. Wybierz bibliotekę IronPDF z wyników wyszukiwania i kliknij przycisk Zainstaluj.
  5. Zaakceptuj wszelkie monity dotyczące Umowy licencyjnej.

Jeśli wolisz używać Konsoli Menedżera pakietów, wykonaj następujące polecenie:

PM > Install-Package IronPdf

To pobierze i zainstaluje IronPDF w Twoim projekcie.

Instalacja za pomocą NuGet Strona internetowa

Aby uzyskać szczegółowy przegląd IronPDF, w tym funkcje, kompatybilność i dodatkowe opcje pobierania, odwiedź stronę IronPDF na stronie NuGet pod adresem https://www.nuget.org/packages/IronPdf.

Instalacja za pomocą biblioteki DLL

Alternatywnie, można bezpośrednio zintegrować IronPDF z projektem, używając pliku DLL. Pobierz plik ZIP zawierający DLL z tego Bezpośrednie pobieranie IronPDF. Rozpakuj plik i dołącz bibliotekę DLL do swojego projektu.

Teraz zmodyfikujmy naszą aplikację, aby dodać zadanie przetwarzania w tle do pobrania strony internetowej jako pliku 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);
    }
}

IronPDF ma wbudowaną metodę do pobierania strony internetowej z URL i zapisywania jej jako dokument PDF. Będziemy używać tej metody w naszej pracy, aby pobrać i zapisać ją w określonej lokalizacji. To zadanie w tle można zmodyfikować, aby pobierało wiele adresów URL stron internetowych i zapisywało je jako PDF.

Teraz dodajmy kontroler, aby wyeksponować generację PDF i API pobierania.

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" };
    }
}

Tutaj stworzyliśmy dwa API: jedno do uruchomienia zadania w tle i pobrania adresu URL strony w celu zainicjowania pobierania oraz drugie API do pobrania wynikowego PDF. API są przedstawione, jak pokazano poniżej.

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 7 - API PDFGenerator

A wyniki wyglądają tak:

Hangfire .NET Core (Jak to działa dla dewelopera): Rysunek 8 - Wynik

Licencjonowanie (dostępna bezpłatna wersja próbna)

Aby powyższy kod działał bez znaków wodnych, wymagany jest klucz licencyjny. Licencja trial jest dostępna dla programistów po zarejestrowaniu w IronPDF Free Trial. Nie jest wymagana karta kredytowa do otrzymania licencji trial. Możesz podać swoje ID e-mail i zarejestrować się na darmowy okres próbny.

Wnioski

Hangfire i IronPDF razem stanowią doskonałe połączenie do generowania i pobierania PDF w tle. Hangfire umożliwia efektywne przetwarzanie zadań długotrwałych, a IronPDF zapewnia elastyczne i łatwe w użyciu rozwiązanie do generacji PDF. Aby dowiedzieć się więcej o IronPDF, możesz odwiedzić Dokumentację IronPDF.

Również, sprawdź inne narzędzia z Iron Software Product Suite, które mogą poprawić Twoje umiejętności kodowania i spełnić współczesne wymagania aplikacji.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta