跳過到頁腳內容
.NET幫助

Topshelf C#(對於開發者的運行原理)

Topshelf是一個廣受歡迎的開放原始碼套件,用來讓在 .NET 中建立 Windows 服務更加容易。 它所提供的框架簡化並合理地建立、部署和管理 Windows 服務,讓開發人員得以專注於業務邏輯,而非複雜的服務控制管理。 IronPDF 是一個功能豐富的 C# 函式庫,用於建立和修改 PDF 檔案,結合 IronPDF,開發人員可以建立可靠且強大的服務,以管理複雜的文件處理工作。

此連線透過在完整的 Windows 服務架構中自動化 PDF 的建立、修訂與散佈,為需要有效且自動化文件工作流程的企業提供無縫的解決方案。 開發人員透過使用 Topshelf 與 IronPDF 適用於 .NET in C#,可在其服務應用程式中獲得高度的功能性與可維護性,同時保證穩健性與易用性。

什麼是 Topshelf C#?

在開放原始碼專案 Topshelf .NET 套件的協助下,Windows 服務的開發、設定與實作變得更容易。 透過消除建立 Windows 服務過程中的許多複雜性,開發人員能夠更專注於應用程式的基本功能,而非 Windows 服務管理的細微差異。

Topshelf 只需修改很少的程式碼,就能讓開發人員輕鬆地將主控台應用程式轉換為服務。 它也提供了流暢的 API 來建立服務設定,包括相依性、復原選項,以及啟動和停止服務的動作。 對於希望有效建立穩定且可管理的 Windows 服務的 .NET 開發人員而言,Topshelf 因其易用性與適應性而深受喜愛。

Topshelf C# (How It Works For Developers):圖 1

Topshelf 提供的多項功能可讓您更輕鬆地在 .NET 中設計及維護 Windows 服務。 以下是其幾項突出特質:

易用性

Topshelf 提供基本且流暢的 API,可簡化使用它設定和管理 Windows 服務的流程。 控制台應用程式可由開發人員輕鬆轉換為服務,幾乎不需修改程式碼。

組態的靈活性

開始、停止、暫停和繼續動作是它支援的組態選項。 服務的依賴性和服務類別的復原選項也可以由開發人員指定。

安裝與卸載

Topshelf 內建的安裝與卸載服務功能,有助於部署使用 .NET Framework 寫成的主機服務。 可透過程式或命令列安裝服務。

記錄

Topshelf 透過整合知名的日誌框架(如 log4net、NLog 和 Serilog),促進開發人員有效記錄服務作業和故障的能力。

服務控制

它相容於所有常見的 Windows 服務控制,例如暫停、繼續、開始和停止。開發人員現在可以完全控制整個服務生命週期。

異常處理

強大的異常處理是 Topshelf 的一項功能,可保證服務能夠優雅地處理故障並保持穩定。

多重服務實體

它可在同一應用程式中建立和管理多個服務實體,為複雜的服務架構提供彈性。

自訂命令列選項

自訂指令列選項可讓開發人員進一步自訂及控制服務的行為。

環境意識

無論是生產伺服器、測試環境或開發系統,Topshelf 都能辨識並適應周遭環境。

支援依賴注入

Topshelf 與相依性注入框架結合使用時,可促進更好的軟體架構,並讓服務相依性的管理變得更容易。

跨平台能力

Topshelf 主要是為 Windows 所製作,但在利用 .NET Core 時,它也可以在 Linux 和 macOS 上執行服務,這增加了它與其他作業系統的相容性。

Create and Config Topshelf C#

使用 C# 中的 Topshelf,透過下列步驟建立並設定 Windows 服務:

建立新的 Visual Studio 專案

使用 Visual Studio 很容易建立控制台專案。 若要在 Visual Studio 環境中啟動 Console Application,請遵循下列簡單步驟:

使用 Visual Studio 之前,請確定您已在電腦上安裝 Visual Studio。

開始新專案

選擇"檔案"、"專案"後,選擇"新增"功能表。

Topshelf C# (How It Works For Developers):圖 2

請從下列專案範本參考清單中選擇"Console App"或"Console App (.NET Core)"。

若要為您的專案命名,請填寫"名稱"欄位。

Topshelf C# (How It Works For Developers):圖 3

選擇專案的儲存位置。

按一下"建立"時,會開啟 Console 應用程式專案。

Topshelf C# (How It Works For Developers):圖 4

透過 NuGet 安裝 Topshelf

使用 NuGet Package Manager,將 Topshelf 加入您的專案。 在套件管理員和主控台應用程式中,執行下列指令:

Install-Package Topshelf

建立服務類別

描述類別的服務邏輯。 除其他服務動作外,Start 和 Stop 也應在此類中實作。

using System;
using Topshelf;

namespace MyWindowsService
{
    // Define a simple service class with Start and Stop methods
    public class MyService
    {
        public bool Start()
        {
            // Service start logic
            Console.WriteLine("Service Started.");
            return true;
        }

        public bool Stop()
        {
            // Service stop logic
            Console.WriteLine("Service Stopped.");
            return true;
        }
    }

    // Main program class to run the Topshelf service
    class Program
    {
        static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                // Configure the service
                x.Service<MyService>(s =>
                {
                    s.ConstructUsing(name => new MyService());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });

                // Run the service as a local system
                x.RunAsLocalSystem();

                // Set service details
                x.SetServiceName("MyService");
                x.SetDisplayName("My Service");
                x.SetDescription("This is a sample service created using Topshelf.");
            });
        }
    }
}
using System;
using Topshelf;

namespace MyWindowsService
{
    // Define a simple service class with Start and Stop methods
    public class MyService
    {
        public bool Start()
        {
            // Service start logic
            Console.WriteLine("Service Started.");
            return true;
        }

        public bool Stop()
        {
            // Service stop logic
            Console.WriteLine("Service Stopped.");
            return true;
        }
    }

    // Main program class to run the Topshelf service
    class Program
    {
        static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                // Configure the service
                x.Service<MyService>(s =>
                {
                    s.ConstructUsing(name => new MyService());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });

                // Run the service as a local system
                x.RunAsLocalSystem();

                // Set service details
                x.SetServiceName("MyService");
                x.SetDisplayName("My Service");
                x.SetDescription("This is a sample service created using Topshelf.");
            });
        }
    }
}
Imports System
Imports Topshelf

Namespace MyWindowsService
	' Define a simple service class with Start and Stop methods
	Public Class MyService
		Public Function Start() As Boolean
			' Service start logic
			Console.WriteLine("Service Started.")
			Return True
		End Function

		Public Function [Stop]() As Boolean
			' Service stop logic
			Console.WriteLine("Service Stopped.")
			Return True
		End Function
	End Class

	' Main program class to run the Topshelf service
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			HostFactory.Run(Sub(x)
				' Configure the service
				x.Service(Of MyService)(Sub(s)
					s.ConstructUsing(Function(name) New MyService())
					s.WhenStarted(Function(tc) tc.Start())
					s.WhenStopped(Function(tc) tc.Stop())
				End Sub)

				' Run the service as a local system
				x.RunAsLocalSystem()

				' Set service details
				x.SetServiceName("MyService")
				x.SetDisplayName("My Service")
				x.SetDescription("This is a sample service created using Topshelf.")
			End Sub)
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

Topshelf C# (How It Works For Developers):圖 5

設定服務

啟動和終止服務的機制包含在 MyService 類別中。 服務定義及其生命週期方法(Start 和 Stop)與 Program 類中相對應的服務動作相連,Program 類中放置了 Topshelf 組態。 服務的屬性,例如名稱、顯示名稱和說明,是使用單一服務類別的 run 方法來設定的。 使用 Topshelf 管理和部署 Windows 服務,可透過此簡明的組態設定變得簡單。

建立並安裝服務

在您建構專案時,請確保無誤。 將 install 指令與已編譯的可執行檔一起使用,即可從指令列啟動服務:

MyWindowsService.exe install
MyWindowsService.exe install
SHELL

開始服務

服務安裝完成後,請使用下列指令啟動服務:

MyWindowsService.exe start
MyWindowsService.exe start
SHELL

卸載服務

如有必要,請使用下列指令提示您解除安裝服務:

MyWindowsService.exe uninstall
MyWindowsService.exe uninstall
SHELL

本範例說明如何在 C# 中使用 Topshelf 來建立和設定 Windows 服務。Topshelf 簡化了程序,方便 Windows 服務的定義、安裝、設定和管理,幾乎不需要任何程式碼。

開始

若要開始使用 IronPDF 和 Topshelf 以 C# 建立 Windows 服務,請執行下列動作:

什麼是 IronPDF?

IronPDF 適用於 .NET Libraries 是一個功能豐富的 .NET 函式庫,C# 程式可用來建立、讀取和編輯 PDF 文件。 透過此程式,開發人員可以輕鬆地將 HTML、CSS 和 JavaScript 內容製作成可供列印的高品質 PDF。 拆分與合併 PDF、為文件加上水印、新增頁首與頁尾,以及將 HTML 轉換為 PDF 是其中幾項基本功能。 IronPDF 同時支援 .NET Framework 和 .NET Core,因此適用範圍廣泛。

由於 PDF 簡單易用且有豐富的說明文件,因此開發人員可以輕鬆地將 PDF 整合到他們的程式中。 IronPDF 可輕鬆處理複雜的版面和格式,確保產生的 PDF 與原始 HTML 內容非常相似。

Topshelf C# (How It Works For Developers):圖 6

IronPDF 的特點

從 HTML 產生 PDF

將 JavaScript、HTML 和 CSS 轉換為 PDF。 支援媒體查詢和回應式設計這兩項當代網路標準。 對於使用 HTML 和 CSS 動態裝飾 PDF 帳單、報告和文件非常有用。

PDF編輯

預先存在的 PDF 可以加入文字、照片和其他內容。 從 PDF 檔案中萃取文字和圖片。 將眾多 PDF 合併為一個檔案。將 PDF 檔案分割成多個獨立的文件。 包括水印、註解、頁首和頁尾。

PDF 轉檔

將多種檔案格式(包括 Word、Excel 和圖片檔案)轉換為 PDF 格式。 PDF 到圖像的轉換(PNG、JPEG 等)。

效能與可靠性

在工業環境中,高效能和可靠度是理想的設計品質。 輕鬆管理大型文件集。

安裝 IronPDF

要獲得在 .NET 專案中使用 PDF 所需的工具,請安裝 IronPDF 套件。

Install-Package IronPdf

使用 IronPDF 建立您的服務類型

定義 IronPDF 用於建立和修改 PDF 檔案的功能,以及該類的服務邏輯。

using System;
using IronPdf;
using Topshelf;

namespace PdfService
{
    // Define a service class with PDF generation logic
    public class MyPdfService
    {
        public bool Start()
        {
            Console.WriteLine("Service Starting...");
            GeneratePdf();
            return true;
        }

        public bool Stop()
        {
            Console.WriteLine("Service Stopping...");
            return true;
        }

        // Method to generate a PDF using IronPDF
        private void GeneratePdf()
        {
            var renderer = new HtmlToPdf();
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, PDF!</h1>");
            pdf.SaveAs("GeneratedDocument.pdf");
            Console.WriteLine("PDF Generated.");
        }
    }

    // Main program to configure and run the service using Topshelf
    class Program
    {
        static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                x.Service<MyPdfService>(s =>
                {
                    s.ConstructUsing(name => new MyPdfService());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });

                x.RunAsLocalSystem();
                x.SetServiceName("MyPdfService");
                x.SetDisplayName("My PDF Service");
                x.SetDescription("A service that generates PDF files using IronPDF and Topshelf.");
            });
        }
    }
}
using System;
using IronPdf;
using Topshelf;

namespace PdfService
{
    // Define a service class with PDF generation logic
    public class MyPdfService
    {
        public bool Start()
        {
            Console.WriteLine("Service Starting...");
            GeneratePdf();
            return true;
        }

        public bool Stop()
        {
            Console.WriteLine("Service Stopping...");
            return true;
        }

        // Method to generate a PDF using IronPDF
        private void GeneratePdf()
        {
            var renderer = new HtmlToPdf();
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, PDF!</h1>");
            pdf.SaveAs("GeneratedDocument.pdf");
            Console.WriteLine("PDF Generated.");
        }
    }

    // Main program to configure and run the service using Topshelf
    class Program
    {
        static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                x.Service<MyPdfService>(s =>
                {
                    s.ConstructUsing(name => new MyPdfService());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });

                x.RunAsLocalSystem();
                x.SetServiceName("MyPdfService");
                x.SetDisplayName("My PDF Service");
                x.SetDescription("A service that generates PDF files using IronPDF and Topshelf.");
            });
        }
    }
}
Imports System
Imports IronPdf
Imports Topshelf

Namespace PdfService
	' Define a service class with PDF generation logic
	Public Class MyPdfService
		Public Function Start() As Boolean
			Console.WriteLine("Service Starting...")
			GeneratePdf()
			Return True
		End Function

		Public Function [Stop]() As Boolean
			Console.WriteLine("Service Stopping...")
			Return True
		End Function

		' Method to generate a PDF using IronPDF
		Private Sub GeneratePdf()
			Dim renderer = New HtmlToPdf()
			Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, PDF!</h1>")
			pdf.SaveAs("GeneratedDocument.pdf")
			Console.WriteLine("PDF Generated.")
		End Sub
	End Class

	' Main program to configure and run the service using Topshelf
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			HostFactory.Run(Sub(x)
				x.Service(Of MyPdfService)(Sub(s)
					s.ConstructUsing(Function(name) New MyPdfService())
					s.WhenStarted(Function(tc) tc.Start())
					s.WhenStopped(Function(tc) tc.Stop())
				End Sub)

				x.RunAsLocalSystem()
				x.SetServiceName("MyPdfService")
				x.SetDisplayName("My PDF Service")
				x.SetDescription("A service that generates PDF files using IronPDF and Topshelf.")
			End Sub)
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

開發人員可透過結合 Topshelf 與 IronPDF in C#,快速設計出強大的 Windows 服務,以進行 PDF 生產與操作。 Topshelf 提供流暢且人性化的 API,讓 Windows 服務的設定與管理變得更容易。

Topshelf C# (How It Works For Developers):圖 7

一個 MyPdfService 類別實現了啟動 (Start) 和結束 (Stop) 服務的方法,封裝了給定範例中的服務邏輯。 IronPDF 用於 Start 方法中,使用 HTML 從 HTML 文字建立簡單的 PDF 文件。 The ability to render HTML into a PDF format using IronPDF's HtmlToPdf class is demonstrated, showing how to turn basic HTML information (such as "

Hello, PDF!

") into a PDF file ("GeneratedDocument.pdf").

Topshelf C# (How It Works For Developers):圖 8

此整合示範了 Topshelf 如何管理服務的生命週期,以確保它能像完整的 Windows 服務一樣運作,以及 IronPDF 如何管理輕鬆建立 PDF 的高難度流程。 透過 Topshelf 與 IronPDF 在 C# 中的結合功能,此整合非常適合需要自動化文件建立或修改的應用程式。 它提供了可靠性和易維護性。

結論

總之,透過 Topshelf 與 IronPDF 在 C# 中的結合,創建和管理需要建立和操作 PDF 的 Windows 服務就成為可能。 Topshelf 為服務組態與管理提供方便使用者的 API,可簡化 Windows 服務的部署。 透過促進服務邏輯內的 HTML 資訊順利產生 PDF 文件,IronPDF 可在此期間改善功能。

這種整合可保證自動化文件工作流程中可靠且強大的效能,同時也能簡化開發流程。 Topshelf with IronPDF in C# 是一個靈活有效的選擇,讓開發人員可以輕鬆地建立複雜的文件處理解決方案,無論是建立報表、發票或任何其他基於 PDF 的任務。

IronPDF 和 Iron Software 授權資訊結合了 Iron Software 令人難以置信的彈性系統和套件,以及其核心支援,為開發人員提供更多的線上應用程式和功能,以及更有效率的開發。

如果授權選項明確且具體到專案,開發人員就能更容易決定哪一種模式是最佳的。 這些優點能讓開發人員以明確、有效且具凝聚力的整合方式解決各種問題。

常見問題解答

Topshelf 如何簡化 .NET 中 Windows 服務的創建?

Topshelf 提供一個簡單的 API,允許開發者通過最小代碼更改將控制台應用程序轉換為 Windows 服務。它專注於使用方便、配置靈活性和強大的異常處理,使開發者能夠專注於業務邏輯而不是服務管理的複雜性。

Topshelf 可以在 Windows 以外的平台使用嗎?

可以,雖然 Topshelf 主要設計為 Windows,但它也可以在 Linux 和 macOS 上運行,使用 .NET Core 增強其跨平台能力。

將 IronPDF 與 Topshelf 整合有何好處?

將 IronPDF 與 Topshelf 整合允許開發者在 Windows 服務中自動化 PDF 文檔工作流程。這種組合提供了一個健壯的解決方案來創建、修改和分發 PDF 文檔,利用 Topshelf 的服務管理和 IronPDF 的 PDF 功能。

如何在 C# 中將 HTML 內容轉換為 PDF 文檔?

您可以使用 IronPDF 通過其為 HTML 到 PDF 轉換而設計的方法將 HTML、CSS 和 JavaScript 內容轉換為 PDF 文檔。IronPDF 支持現代 Web 標準和響應式設計,確保高質量的 PDF 輸出。

使用 Topshelf 構建 Windows 服務的具體過程是什麼?

要使用 Topshelf 構建 Windows 服務,請在 Visual Studio 中創建新項目,通過 NuGet 安裝 Topshelf,編寫包含 StartStop 方法的服務類,使用 Topshelf 的 API 配置服務,然後構建項目。最後,使用命令行命令安裝並啟動服務。

Topshelf 在服務管理方面的關鍵特性是什麼?

Topshelf 提供的特性包括使用方便、配置靈活性、日誌記錄、強大的異常處理、多個服務實例支持以及與常見的 Windows 服務控件兼容,這使其成為 .NET 開發人員的多功能工具。

如何使用 Windows 服務實現自動化的文檔工作流?

可以通過將 Topshelf 與 IronPDF 結合,創建處理 PDF 生成、修改和分發任務的 Windows 服務,在服務框架內實現自動化文檔工作流。

IronPDF 的許可選擇有哪些?

IronPDF 提供靈活的授權選項,根據不同項目的需求量身定制,允許開發者根據其特定需求高效地將 PDF 功能整合到其應用程序中。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我