Browse Source

[csharp] Update to GenHTTP 9.6 and use a regular handler for JSON (#9568)

* Update to GenHTTP 9.6 and use a regular handler for JSON

* Use the same .NET optimizations as everyone elese

* Update to 9.6.2
Andreas Nägeli 5 months ago
parent
commit
51a63ae2fa

+ 7 - 8
frameworks/CSharp/genhttp/Benchmarks/Benchmarks.csproj

@@ -16,22 +16,21 @@
     </PropertyGroup>
 
     <ItemGroup>
-        <None Remove="Resources\Fortunes.html"/>
-        <None Remove="Resources\Template.html"/>
+        <None Remove="Resources\Fortunes.html" />
+        <None Remove="Resources\Template.html" />
     </ItemGroup>
 
     <ItemGroup>
-        <EmbeddedResource Include="Resources\Template.html"/>
+        <EmbeddedResource Include="Resources\Template.html" />
     </ItemGroup>
 
     <ItemGroup>
 
-        <PackageReference Include="GenHTTP.Core.Kestrel" Version="9.0.0" />
-        <PackageReference Include="GenHTTP.Modules.Razor" Version="8.6.0" />
-        <PackageReference Include="GenHTTP.Modules.Webservices" Version="9.0.0" />
+        <PackageReference Include="GenHTTP.Core" Version="9.6.2" />
+        <PackageReference Include="GenHTTP.Modules.Webservices" Version="9.6.2" />
 
-        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.0" />
-        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.0" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.1" />
+        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.3" />
 
     </ItemGroup>
 

+ 4 - 2
frameworks/CSharp/genhttp/Benchmarks/Program.cs

@@ -1,14 +1,16 @@
 using Benchmarks.Tests;
 using Benchmarks.Utilities;
-using GenHTTP.Engine.Kestrel;
+
+using GenHTTP.Engine.Internal;
+
 using GenHTTP.Modules.IO;
 using GenHTTP.Modules.Layouting;
 using GenHTTP.Modules.Webservices;
 
 var tests = Layout.Create()
                   .Add("plaintext", Content.From(Resource.FromString("Hello, World!")))
+                  .Add("json", new JsonHandler())
                   .Add("fortunes", new FortuneHandler())
-                  .AddService<JsonResource>("json")
                   .AddService<DbResource>("db")
                   .AddService<QueryResource>("queries")
                   .AddService<UpdateResource>("updates")

+ 39 - 0
frameworks/CSharp/genhttp/Benchmarks/Tests/JsonHandler.cs

@@ -0,0 +1,39 @@
+using System.Text.Json;
+
+using GenHTTP.Api.Content;
+using GenHTTP.Api.Protocol;
+
+using GenHTTP.Modules.Conversion.Serializers.Json;
+
+namespace Benchmarks.Tests;
+
+public sealed class JsonResult
+{
+
+    public string Message { get; set; }
+}
+
+public sealed class JsonHandler : IHandler
+{
+    private static readonly FlexibleContentType _ContentType = new(ContentType.ApplicationJson, "utf-8");
+
+    private static readonly JsonSerializerOptions _Options = new();
+
+    public ValueTask PrepareAsync() => new();
+
+    public ValueTask<IResponse> HandleAsync(IRequest request)
+    {
+        var result = new JsonResult()
+        {
+            Message = "Hello, World!"
+        };
+
+        var response = request.Respond()
+                              .Content(new JsonContent(result, _Options))
+                              .Type(_ContentType)
+                              .Build();
+
+        return new(response);
+    }
+
+}

+ 0 - 20
frameworks/CSharp/genhttp/Benchmarks/Tests/JsonResource.cs

@@ -1,20 +0,0 @@
-using GenHTTP.Modules.Webservices;
-
-namespace Benchmarks.Tests;
-
-public sealed class JsonResult
-{
-
-    public string Message { get; set; }
-}
-
-public sealed class JsonResource
-{
-
-    [ResourceMethod]
-    public JsonResult GetMessage() => new()
-    {
-        Message = "Hello, World!"
-    };
-
-}

+ 5 - 0
frameworks/CSharp/genhttp/genhttp.dockerfile

@@ -11,6 +11,11 @@ RUN dotnet publish -c release -o /app -r linux-musl-x64 --no-restore --self-cont
 
 # final stage/image
 FROM mcr.microsoft.com/dotnet/runtime-deps:9.0-alpine
+
+ENV DOTNET_GCDynamicAdaptationMode=0
+ENV DOTNET_ReadyToRun=0
+ENV DOTNET_HillClimbing_Disable=1
+
 WORKDIR /app
 COPY --from=build /app .