SignalRems.Server 1.0.21

dotnet add package SignalRems.Server --version 1.0.21
                    
NuGet\Install-Package SignalRems.Server -Version 1.0.21
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SignalRems.Server" Version="1.0.21" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SignalRems.Server" Version="1.0.21" />
                    
Directory.Packages.props
<PackageReference Include="SignalRems.Server" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SignalRems.Server --version 1.0.21
                    
#r "nuget: SignalRems.Server, 1.0.21"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SignalRems.Server@1.0.21
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SignalRems.Server&version=1.0.21
                    
Install as a Cake Addin
#tool nuget:?package=SignalRems.Server&version=1.0.21
                    
Install as a Cake Tool

SignalR EMS

Description

SignalRems is one Enterprise Messaging System (EMS) implemented by .NET Standard SignalR. It provides two communication models, RPC and PUB/SUB. This library will provide strong typed API to help client application communicate with server. It is using Newtonsoft.json or MessagePack for serialization/deserialization. In PUB/SUB mode, it subscribes with filter of Lambda expression.

Dependency

This libiary is built on SingalR, hence the server application must be using "Microsoft.NET.Sdk.Web" SDK. The client side could use any .net SDK. Currently this project runs under dotnet core 8.0 and above.

API usage

RPC Server

  1. Configure WebApplication builder;
var builder = WebApplication.CreateBuilder(args);
// Using Json serialization/deserialization
builder.Services.AddSignalRemsService(); 

// Or, using MessagePack serialization/deserialization
// builder.Services.AddSignalRemsService(true); 
  1. Setup endpoint for app instance:
var app = builder.Build();
app.MapSignalRemsRpcHub("/signalr/ems/example/rpc");
  1. Register RPC handler in IRpcService instance. IRpcService instance is singleton and can be get from dependency injection, handler implements IRpcHandler<,> interface to handle the RPC logic;
IRpcService rpcService;
IRpcHandler<GetUserNameRequest, GetUserNameResponse> handler;
rpcService.RegisterHandler<GetUserNameRequest, GetUserNameResponse>(handler);

RPC Client

  1. Config RPC client into dependency injection;
services.AddSignalRemsClient(); // Using Json serialization/deserialization
// services.AddSignalRemsClient(true); // MessagePack serialization/deserialization
  1. Make connection and call:
await _rpcClient.ConnectAsync("https://localhost:7198", "/signalr/ems/example/rpc", stoppingToken);
var request = new GetUserNameRequest() { UserId = i.ToString() };
var response = await _rpcClient.SendAsync<GetUserNameRequest, GetUserNameResponse>(request);

PUB/SUB Server

  1. Configure WebApplication builder;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSignalRemsService();
  1. Setup endpoint for app instance:
var app = builder.Build();
app.MapSignalRemsPublisherHub("/signalr/ems/example/pubsub");
  1. Create publisher from IPublisherService, IPublisherService is singleton instance;
IPublisherService publisherService;
var publisher =  _publisherService.CreatePublisher<Person, int>("Message");
  1. Publish item to topic
publisher.Publish(new Person() { Id = id, Age = random.Next(95), Name = $"Person_{id:000}" });

PUB/SUB Client

  1. Config subscriber client into dependency injection;
services.AddSignalRemsClient();
  1. Make connection and call. It supports Lambda expression as filter. This Lambda expression must be able to be explained from both server and client.
ISubscriptionHandler<Person> handler;
await _subscriberClient.ConnectAsync("https://localhost:7198", "/signalr/ems/example/pubsub", stoppingToken);
// Subscribe people whose age is over 60.
var subscription = await _subscriberClient.SubscribeAsync("Message", _personHandler, p=> p.Age > 60);

// Or, subscribe people with given Id 1, 2, 3, as one client can only make one subscription, this example shows in comment. 
// var subscriptionByKeys = await _subscriberClient.SubscribeWithKeysAsync("Message", _personHandler, 1, 2, 3);

Please note, if using subscription without keys, one client can only be used to do one subscription. The dispose method will stop the subscription and disconnect from server. We can get multiple client instances from DI container to subscribe with differnet topic/filter. If using subscription by keys mode, the client can be used to subscribe/unsubscribe by keys multiple times, but it can't subscribe without given keys.

License

This project is open source and follows MIT license.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.21 32 7/18/2026
1.0.20 96 7/9/2026
1.0.19 149 2/11/2026
1.0.18 323 8/27/2025
1.0.17 296 10/9/2024
1.0.16 259 9/24/2024
1.0.15 320 8/8/2023
1.0.14 551 10/10/2022
1.0.13 544 9/29/2022
1.0.12 557 8/25/2022
1.0.11 556 8/22/2022
1.0.10 555 7/25/2022
1.0.9 547 7/23/2022
1.0.8 585 7/12/2022
1.0.7 570 7/12/2022
1.0.6 599 7/3/2022
1.0.5 566 6/24/2022
1.0.4 555 6/24/2022
1.0.3 569 6/23/2022
1.0.2 561 6/13/2022
Loading failed