From 51944e65d51e43d43c8f746c4be812ea5ea70863 Mon Sep 17 00:00:00 2001 From: ahmetfarukulu Date: Wed, 6 Nov 2024 16:14:53 +0300 Subject: [PATCH] Add article on SignalR support for trimming and Native AOT --- .../POST.md | 113 ++++++++++++++++++ .../chat.png | Bin 0 -> 38949 bytes 2 files changed, 113 insertions(+) create mode 100644 docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/POST.md create mode 100644 docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/chat.png diff --git a/docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/POST.md b/docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/POST.md new file mode 100644 index 0000000000..c43c30d268 --- /dev/null +++ b/docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/POST.md @@ -0,0 +1,113 @@ +# SignalR supports trimming and Native AOT + +## What is SignalR? + +SignalR is a library that allows you to add real-time web functionality to your applications. It provides a simple API for creating server-to-client remote procedure calls (RPC) that can be called from the server and client. Now SignalR supports trimming and Native AOT in .NET 8.0 and .NET 9.0. You can learn more about [SignalR new features](https://abp.io/community/articles/asp.net-core-signalr-new-features-summary-kcydtdgq) in this article. + +## What is trimming and Native AOT? + +AOT (Ahead-of-Time) compilation is a feature that allows you to compile your application into native code before running it. This can help improve performance and reduce startup times. Trimming is a feature that allows you to remove unused code from your application, reducing its size and improving performance. You can learn more about [Native AOT Compilation](https://abp.io/community/articles/native-aot-compilation-in-.net-8-oq7qtwov) in this article. + +## How to use SignalR with trimming and Native AOT? + +You can create ASP.NET Core AOT application with using the following command: + +```bash +dotnet new webapiaot -n Acme.Sample +``` + +The created application uses `CreateSlimBuilder` method to create minimal builder for the application. You can use `CreateBuilder` method to create a builder with all the services registered. However, deploying an application with `CreateSlimBuilder` method is more convenient because it reduces the size of the application. You can learn more about [CreateSlimBuilder vs CreateBuilder](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/native-aot#createslimbuilder-vs-createbuilder). + +Replace the `Program.cs` file with the following code: + +```csharp +using Microsoft.AspNetCore.SignalR; +using System.Text.Json.Serialization; + +var builder = WebApplication.CreateSlimBuilder(args); + +builder.Services.AddSignalR(); +builder.Services.Configure(o => +{ + o.PayloadSerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default); +}); + +var app = builder.Build(); + +app.MapHub("/chatHub"); +app.MapGet("/", () => Results.Content(""" + + + + SignalR Chat + + + + + +
    + + + + + +""", "text/html")); + +app.Run(); + +[JsonSerializable(typeof(string))] +internal partial class AppJsonSerializerContext : JsonSerializerContext { } + +public class ChatHub : Hub +{ + public async Task SendMessage(string user, string message) + { + await Clients.All.SendAsync("ReceiveMessage", user, message); + } +} +``` + +It is a simple chat application that uses SignalR to send and receive messages. + +![chat](chat.png) + +Before deploying the application, ensure that **Desktop development with C++** is installed on your machine if you're using Windows OS. For more details, you can check the [pre-requisites](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot#prerequisites). + +You can deploy the application with the following command: + +```bash +dotnet publish -c Release +``` + +### Limitations + +Since we are using Native AOT, there are some limitations that you should be aware of: + +- **Only the JSON protocol is supported**: For the payload serialization in SignalR, only the JSON protocol is supported. You need to configure the `JsonHubProtocolOptions` to use the `AppJsonSerializerContext` for serialization/deserialization. +- **Reflection**: Native AOT does not support reflection. You need to use the `JsonSerializable` attribute to specify the types that should be serialized/deserialized. In this example, we have used the `JsonSerializable` attribute for the `string` type in the `AppJsonSerializerContext` class. + +For more details, you can check the [limitations](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot#limitations-of-native-aot-deployment) of Native AOT. + +## Conclusion + +In this article, we learned how to use SignalR with trimming and Native AOT in .NET 8.0 and .NET 9.0. We created a simple chat application that uses SignalR to send and receive messages. We also discussed the limitations of using Native AOT and how to overcome them. + +For more information, you can refer to the [Microsoft's official document](https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-9.0?view=aspnetcore-9.0#signalr-supports-trimming-and-native-aot). \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/chat.png b/docs/en/Community-Articles/2024-11-05-SignalR-supports-trimming-and-Native-AOT/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..c86eab9f7aeef26870dad66cc29eb9e5ad66ae50 GIT binary patch literal 38949 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

    !^(d#PQKp#!fC69j-`EJsolh+ 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 JDl~Ap{vSGlwGaRR literal 0 HcmV?d00001