ホームページ >バックエンド開発 >C++ >ASP.NET Core コントローラーから SignalR Core ハブ メソッドを呼び出す方法

ASP.NET Core コントローラーから SignalR Core ハブ メソッドを呼び出す方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 05:55:44767ブラウズ

How to Invoke SignalR Core Hub Methods from an ASP.NET Core Controller?

コントローラーからの SignalR Core ハブ メソッドの呼び出し

ASP.NET Core アプリケーションでは、コントローラーから Hub メソッドを呼び出すことが必要になる場合があります。たとえば、外部サービスがタスクを実行し、接続されているクライアントに SignalR を通じて通知する必要がある場合。

解決策 1 (動的)

Microsoft.AspNetCore.SignalR ライブラリを使用する場合(バージョン 1.0.0-alpha2-final) では、ハブの IHubContext をコントローラーに挿入できます。以下に例を示します。

[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        await this.HubContext.Clients.All.InvokeAsync("Completed", id);
        return new JsonResult(true);
    }

    private IHubContext<VarDesignHub> HubContext
    { get; set; }
}

解決策 2 (型付き)

サーバーがクライアント ハブで呼び出すことができるメソッドを定義するインターフェイスを作成することを検討してください。このアプローチは「型付きハブ エンドポイント」として知られています:

public interface ITypedHubClient
{
    Task TaskCompleted(int id);
}

public class VarDesignHub : Hub<ITypedHubClient>
{
    public Task TaskCompleted(int id) => Clients.All.InvokeAsync("Completed", id);
}

コントローラーで、型付き HubContext を挿入し、メソッドを呼び出します:

[Route("API/demo")]
public class DemoController : Controller
{
    private IHubContext<VarDesignHub, ITypedHubClient> _chatHubContext;

    public DemoController(IHubContext<VarDesignHub, ITypedHubClient> chatHubContext)
    {
        _chatHubContext = chatHubContext;
    }

    [HttpGet]
    public IActionResult TaskCompleted(int id)
    {
        _chatHubContext.Clients.All.TaskCompleted(id);
        return Ok();
    }
}

以上がASP.NET Core コントローラーから SignalR Core ハブ メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。