フッターコンテンツにスキップ
.NETヘルプ

Signalr C# (開発者向けの仕組み)

現代のウェブはインタラクティブ性とリアルタイムフィードバックで成り立っています。 応答性のあるアプリケーションを構築する際には、リアルタイムのウェブ機能が必要です。ここでSignalRが活躍します。 ASP.NET Core SignalRは、あなたのアプリケーションにリアルタイムのウェブ機能を追加するのを考えているよりも簡単にするライブラリです。

このチュートリアルでは、SignalRの基本とニュアンスを学ぶ旅に出かけます。 では、始めましょう!

ASP.NET CoreにおけるSignalRの紹介

ASP.NET Core SignalRは、WebSocketsやサーバーサイドイベントのような技術を使用してリアルタイムのウェブ機能を作成するためのAPIを提供します。 これはASP.NET Coreに限定されていません。 SignalRを使って、ブラウザやモバイルアプリのような様々なクライアントとも使用でき、接続されたクライアントがすぐに更新されることを保証します。

開発環境のセットアップ

始めるには、次が必要です:

SignalRハブの構築

本質的には、SignalRはSignalRハブを中心に回ります。これはクライアントとサーバーの相互作用の中心点です。

新しい ASP.NET Core プロジェクトを作成します。 新しいクラスを追加し、それをChatHubと名付けましょう。 これが私たちのSignalRハブとして機能します。

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

// Define a SignalR Hub class named ChatHub
public class ChatHub : Hub
{
    // Asynchronous method to send messages
    public async Task SendMessage(string user, string message)
    {
        // Send a message to all connected clients
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

// Define a SignalR Hub class named ChatHub
public class ChatHub : Hub
{
    // Asynchronous method to send messages
    public async Task SendMessage(string user, string message)
    {
        // Send a message to all connected clients
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}
Imports Microsoft.AspNetCore.SignalR
Imports System.Threading.Tasks

' Define a SignalR Hub class named ChatHub
Public Class ChatHub
	Inherits Hub

	' Asynchronous method to send messages
	Public Async Function SendMessage(ByVal user As String, ByVal message As String) As Task
		' Send a message to all connected clients
		Await Clients.All.SendAsync("ReceiveMessage", user, message)
	End Function
End Class
$vbLabelText   $csharpLabel

Startupクラスでハブを統合しましょう。

public class Startup
{
    // Configure services and add SignalR
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR(); // Add SignalR services
    }

    // Configure the app to use SignalR and map the hub
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Setup endpoint to route to ChatHub
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chatHub");
        });
    }
}
public class Startup
{
    // Configure services and add SignalR
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR(); // Add SignalR services
    }

    // Configure the app to use SignalR and map the hub
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Setup endpoint to route to ChatHub
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chatHub");
        });
    }
}
Public Class Startup
	' Configure services and add SignalR
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		services.AddSignalR() ' Add SignalR services
	End Sub

	' Configure the app to use SignalR and map the hub
	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		' Setup endpoint to route to ChatHub
		app.UseEndpoints(Sub(endpoints)
			endpoints.MapHub(Of ChatHub)("/chatHub")
		End Sub)
	End Sub
End Class
$vbLabelText   $csharpLabel

クライアントサイドの実装

SignalRは汎用性があります。このチュートリアルではASP.NET CoreとJavaScriptクライアントライブラリに焦点を当てていますが、SignalRは.NETからJavaまでの様々なクライアントをサポートしています。

SignalRクライアントライブラリの使用

SignalRクライアントライブラリは、クライアントサイドのコードがサーバーサイドと直接接続し、通信することを可能にします。例としてJavaScriptを使ってみましょう。

まず、SignalR JavaScriptクライアントライブラリを追加します。

<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@3.1.8/dist/browser/signalr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@3.1.8/dist/browser/signalr.js"></script>
HTML

次に、ハブに接続することができます。

// Create a connection to the SignalR hub
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub") // The hub URL
    .build();

// Start the connection
connection.start().catch(err => console.error(err.toString()));

// Setup a listener for receiving messages
connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user} says: ${message}`);
});
// Create a connection to the SignalR hub
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub") // The hub URL
    .build();

// Start the connection
connection.start().catch(err => console.error(err.toString()));

// Setup a listener for receiving messages
connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user} says: ${message}`);
});
JAVASCRIPT

この単純なクライアントサイドコードは、ハブに接続し、ブロードキャストされたメッセージをリスンします。

アクション中のリアルタイム機能

メッセージの送信

先ほどのクライアントサイドとサーバーサイドのコードスニペットを使用して、メッセージの送信は簡単です。 サーバーとクライアントの両方が通信を開始できます。

サーバーサイドから:

// Send a message from the server to all connected clients
await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!");
// Send a message from the server to all connected clients
await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!");
' Send a message from the server to all connected clients
Await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!")
$vbLabelText   $csharpLabel

クライアントから:

// Send a message from the client to the server
connection.send("SendMessage", "Client", "Hello from client!")
    .catch(err => console.error(err.toString()));
// Send a message from the client to the server
connection.send("SendMessage", "Client", "Hello from client!")
    .catch(err => console.error(err.toString()));
JAVASCRIPT

高度なリアルタイム通信

ASP.NET Core SignalRは高度なリアルタイム通信機能を提供します:

  1. 接続のグループ化:接続されたクライアントをグループに分け、特定のセグメントにメッセージをブロードキャストします。
  2. 切断の処理:クライアント接続および切断を自動的に管理します。
  3. バイナリプロトコル:SignalRはデフォルトではテキストベースのプロトコルを使用しますが、バイナリプロトコルもサポートしています。

Azure SignalRサービスとのSignalR

スケーラブルなリアルタイム機能のためには、Azure SignalRサービスを統合します。 この完全管理されたサービスは、同時に接続される大量の接続をサポートしており、高需要のアプリに最適です。

Azure SignalRサービスの統合:

  1. Azure SignalR SDKをインストールします。
  2. バックプレーンサポートのためにAzure Service Busを使用します。
  3. Startupクラスを調整してAzure SignalRを使用します。
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Azure SignalR services
        services.AddSignalR().AddAzureSignalR();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Use Azure SignalR and map hub with routes
        app.UseAzureSignalR(routes =>
        {
            routes.MapHub<ChatHub>("/chatHub");
        });
    }
}
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Azure SignalR services
        services.AddSignalR().AddAzureSignalR();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Use Azure SignalR and map hub with routes
        app.UseAzureSignalR(routes =>
        {
            routes.MapHub<ChatHub>("/chatHub");
        });
    }
}
Public Class Startup
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		' Add Azure SignalR services
		services.AddSignalR().AddAzureSignalR()
	End Sub

	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		' Use Azure SignalR and map hub with routes
		app.UseAzureSignalR(Sub(routes)
			routes.MapHub(Of ChatHub)("/chatHub")
		End Sub)
	End Sub
End Class
$vbLabelText   $csharpLabel

プレミアムな.NETツールでSignalRを強化するIron Suite

ASP.NET Core SignalRは優れたリアルタイムウェブ機能の基盤を提供しますが、開発者はしばしば全体的な体験と機能を強化するためのツールを探します。 そこでIron Softwareのライブラリスイートが登場します。

Iron Suiteは、SignalRを利用するASP.NET Coreアプリケーションを強化するために設計されたプレミアムな.NETライブラリのスイートです。 このスイートの各製品は独自の機能を提供し、より豊かなアプリケーション体験を保証します。 提供内容を詳しく見てみましょう:

IronPDF

Signalr C# (開発者向けの動作方法) 図1

IronPDFの機能について詳しく学ぶことにより、.NETアプリケーション内でPDFファイルを生成、編集、および読み取ることができます。 チームがリアルタイムでドキュメントを共同作成するシナリオでSignalRを統合することを想像してください。変更が行われると、ドキュメントが即座に更新されたすべての接続されたクライアントにプッシュされ、飛躍的にPDFに変換されます。 SignalRのリアルタイム機能とIronPDFの能力が組み合わさることで、コラボレーションツールが革新される可能性があります。

IronPDFはHTML、URL、およびフルウェブページをオリジナルのように美しいPDFに変換します。 オンラインレポート、請求書、または保存したいウェブベースの情報を保存するのに最適です。HTMLからPDF変換を希望していますか? IronPDFを今日試してください!

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
$vbLabelText   $csharpLabel

IronXL

Signalr C# (開発者向けの動作方法) 図2

Excelスプレッドシートの操作に関しては、IronXLの機能を探索するが最適です。 ビジネスシーンでは、スプレッドシートは重要な役割を果たします。 SignalRとIronXLを組み合わせることで、経理チームがリアルタイムで予算表に取り組み、その変化を目の当たりにすることができるようになります。 様々な部門からのデータがリアルタイムで更新され、すべての関係者に提示される、集中化されたExcelシートに流れ込むシナリオを想像してください。 リアルタイムコミュニケーションと動的スプレッドシート管理の融合は、この組み合わせで実現します。

IronOCR

Signalr C# (開発者向けの動作方法) 図3

光学文字認識(OCR)は、現代のアプリケーションで不可欠です。 IronOCRをアクションで見ることで、.NET開発者が画像やドキュメントからテキストを抽出できることがわかります。 SignalRのリアルタイム機能と組み合わせることで、画期的な存在になるでしょう。 ユーザーがテキストデータを含む画像をアップロードするプラットフォームを考えてみてください。 IronOCRが画像を処理したらすぐにユーザーにリアルタイムで通知するためにSignalRが使われ、データ抽出がインタラクティブで即座に行われます。

IronBarcode

Signalr C# (開発者向けの動作方法) 図4

バーコーディングは、在庫管理、発券システムなどにおいて不可欠です。 IronBarcodeの機能を発見することで、バーコードの作成と読み取りを簡単にします。 次に、これを会社の経理管理システムでSignalRと統合することを考えてみましょう。 物品がスキャンされると、在庫がリアルタイムで更新され、接続されたクライアントに在庫レベルが通知され、スムーズな物流運営が保証されます。

結論

Signalr C# (開発者向けの動作方法) 図5

ASP.NET Core SignalRとIron Suiteの強力なツールが融合することで、開発者とエンドユーザーの両方にとって向上した体験が約束されています。 リアルタイムのウェブ機能は通信だけではなく、適切なリソースであるIron Suiteと組み合わさることで、インタラクティブなアプリケーションを再定義する変革ツールになります。

Iron Suiteが提供する価値提案には注目するに値します。各製品ライセンスは$799から始まり、開発者にプレミアムな機能セットを提供します。 ですが、すぐに決めることが不安な場合は、各製品がIron Softwareプロダクトの無料トライアルを寛大に提供しています。 これにより、決定前に機能を試すことができます。

そして、複数のツールを統合することを考えている場合は、素晴らしいニュースがあります:Iron Suite全体を購入することで、わずか二つの製品の値段で追加の価値が得られます! これは、コストパフォーマンスを最大限に活用するだけでなく、ASP.NET Core SignalRアプリケーションを革新するための包括的なツールキットを手に入れることも保証されています。

よくある質問

SignalRとは何で、どのようにウェブアプリケーションを強化するのですか?

SignalRはASP.NET Coreのライブラリで、リアルタイムのウェブ機能をアプリケーションに追加し、サーバーとクライアントの瞬時の通信を可能にします。これにより、リアルタイム更新やフィードバックを許すことで、インタラクティブで応答性の高いウェブアプリケーションが実現します。

C#アプリケーションでSignalRをセットアップするにはどうすればよいですか?

C#アプリケーションでSignalRをセットアップするためには、ASP.NET Core SDKをインストールし、開発にはVisual Studioを使用します。StartupクラスにSignalRサービスを追加し、ハブをエンドポイントにマッピングすることで、サーバークライアント間の通信を確立します。

リアルタイム通信におけるSignalR Hubの役割は何ですか?

SignalR Hubは、サーバーと接続されたクライアント間の通信を促進する中心的なコンポーネントとして機能します。リアルタイムでのメッセージ送受信を可能にし、SignalRの機能の主要な部分となります。

SignalRでリアルタイムメッセージングをどのように処理できますか?

SignalRでのリアルタイムメッセージングは、サーバーサイドのハブとクライアントサイドのスクリプトを作成することで管理できます。クライアントサイドのJavaScriptはハブへの接続を確立し、connection.onconnection.sendのようなメソッドでメッセージを送受信します。

SignalRの高度な機能にはどのようなものがありますか?

SignalRは、通信をセグメント化するための接続のグループ化、クライアントの切断を優雅に処理する機能、リアルタイム通信能力を強化するためのバイナリプロトコルのサポートなどの高度な機能を提供します。

Azure SignalR Serviceはアプリケーションのスケーリングにどのように役立ちますか?

Azure SignalR Serviceは、多数の同時接続をサポートすることでアプリケーションをスケーリングすることを可能にします。Azure SignalR SDKをインストールし、スタートアップクラスを構成して、スケーラブルなリアルタイム通信のためにAzureのインフラを活用します。

SignalRアプリケーションでPDFを生成するためにIronPDFをどのように使用できますか?

SignalRアプリケーションでPDFドキュメントを生成するためにIronPDFを使用できます。IronPDFのRenderHtmlAsPdfメソッドを用いてHTMLコンテンツをPDFに変換し、SignalRのリアルタイム更新とシームレスに統合できます。

IronXLがSignalRアプリケーションにもたらす利点は何ですか?

IronXLはSignalRアプリケーションをExcelファイルの操作により強化します。アプリケーション内でExcelドキュメントの作成、読み込み、修正を可能にし、リアルタイム機能と共にさらなるデータ処理能力を提供します。

IronOCRをSignalRアプリケーションに統合してテキスト認識を行うことはできますか?

はい、IronOCRはSignalRアプリケーションに統合して光学式文字認識(OCR)を実行することができます。これにより、リアルタイムで画像からテキストを抽出し、動的なテキスト認識能力を持つアプリケーションを強化します。

SignalRアプリケーションでIronBarcodeを使用する可能性は何ですか?

IronBarcodeはSignalRアプリケーションでバーコードの生成とリアルタイムの読み取りに使用できます。この機能は、動的なバーコード処理とリアルタイムデータのハンドリングを要求するアプリケーションにとって有益です。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。