Skip to content

Add new transport based on MessagePack#591

Merged
Daniel-Svensson merged 69 commits into
mainfrom
copilot/msgpack
Jun 16, 2026
Merged

Add new transport based on MessagePack#591
Daniel-Svensson merged 69 commits into
mainfrom
copilot/msgpack

Conversation

@Daniel-Svensson

@Daniel-Svensson Daniel-Svensson commented Jun 14, 2026

Copy link
Copy Markdown
Member
  • New Features

    • Added MessagePack wire format support for domain clients and servers with application/vnd.msgpack MIME type
    • New AddMessagePackSerialization() ASP.NET Core builder methods for streamlined configuration
  • Documentation

    • Added MessagePack serialization schema and configuration guides
    • Added notes on MessagePack serialization limitations and workarounds
  • Bug Fixes

    • Fixed argument validation in AspNetCore configuration builders
  • Update Codegen for types with required parameters
    • look at Update generated code to handle TestDomainServices.MockReport issue with required members
  • Ensure whole class hierarchies are properly serialized/deserialized when using "object" serializer
    • messagepack markdown file in src folder

Benchmarks

Query of 20 000 relativly small text heavy entities

image

Query of 50

image

Summary by CodeRabbit

Release Notes

  • New Features
    • Added MessagePack serialization support (application/vnd.msgpack) with request/response envelopes.
    • Enabled MessagePack via AddMessagePackSerialization() for server configuration.
    • Added MessagePack HTTP domain client support and end-to-end/roundtrip test coverage.
  • Bug Fixes
    • Improved argument validation for configuration builders.
  • Documentation
    • Added MessagePack wire-schema documentation and MessagePack serialization workarounds.

Daniel-Svensson and others added 30 commits May 26, 2026 21:52
Co-authored-by: Daniel-Svensson <3167509+Daniel-Svensson@users.noreply.github.com>
Co-authored-by: Daniel-Svensson <3167509+Daniel-Svensson@users.noreply.github.com>
Co-authored-by: Daniel-Svensson <3167509+Daniel-Svensson@users.noreply.github.com>
Co-authored-by: Daniel-Svensson <3167509+Daniel-Svensson@users.noreply.github.com>
* Parameter passing WORKS
* DateTime passing don't throw (Need to investigate)
…ks working.

365 tests are now passing (with submit not yet working) , 323  failing
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Comment thread src/Test/OpenRiaservices.EndToEnd.AspNetCore.Test/Main.cs
Comment thread src/OpenRiaServices.Client/Framework/Entity.cs Outdated
Comment thread src/Test/AspNetCoreWebsite/MessagePack/CustomComparerProvider.cs Outdated
@Daniel-Svensson
Daniel-Svensson requested a review from Copilot June 15, 2026 14:23
@Daniel-Svensson Daniel-Svensson linked an issue Jun 15, 2026 that may be closed by this pull request
16 tasks

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces MessagePack (application/vnd.msgpack) as a new wire format for OpenRiaServices over ASP.NET Core HTTP, including server-side serialization providers, client-side HTTP domain client support, and associated codegen/test/doc updates.

Changes:

  • Added MessagePack serialization provider and request/response envelope handling in OpenRiaServices.Hosting.AspNetCore, plus new AddMessagePackSerialization() builder APIs.
  • Added MessagePack-capable HTTP domain client factory/client and supporting converters on the client side.
  • Updated code generation baselines and tooling to add a PolyType “deserialization constructor” workaround for required members; added/updated tests and documentation.

Reviewed changes

Copilot reviewed 63 out of 63 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
src/Test/OpenRiaservices.EndToEnd.Wcf.Test/Data/CustomMethodTests.cs Adjusts expected failure behavior for nonexistent entity action under MessagePack conditional builds
src/Test/OpenRiaservices.EndToEnd.Wcf.Test/Data/ComplexTypeTests.cs Improves assertion message clarity
src/Test/OpenRiaservices.EndToEnd.AspNetCore.Test/OpenRiaservices.EndToEnd.AspNetCore.Test.csproj Links MessagePack helper code from test website into test project (with exclusions)
src/Test/OpenRiaservices.EndToEnd.AspNetCore.Test/Main.cs Switches test client factory selection to MessagePack under NET10
src/Test/Desktop/OpenRiaServices.Common.DomainServices.Test/Baselines/FullTypeNames/Scenarios/TestProvider_Scenarios_CodeGen.g.vb Baseline update for new PolyType deserialization constructor
src/Test/Desktop/OpenRiaServices.Common.DomainServices.Test/Baselines/FullTypeNames/Scenarios/TestProvider_Scenarios_CodeGen.g.cs Baseline update for new PolyType deserialization constructor
src/Test/Desktop/OpenRiaServices.Common.DomainServices.Test/Baselines/Default/Scenarios/TestProvider_Scenarios_CodeGen.g.vb Baseline update for new PolyType deserialization constructor
src/Test/Desktop/OpenRiaServices.Common.DomainServices.Test/Baselines/Default/Scenarios/TestProvider_Scenarios_CodeGen.g.cs Baseline update for new PolyType deserialization constructor
src/Test/Desktop/OpenRiaServices.Common.DomainServices.Test/Baselines/Default/Mocks/MockCustomers.g.vb Baseline update for new PolyType deserialization constructor
src/Test/Desktop/OpenRiaServices.Common.DomainServices.Test/Baselines/Default/Mocks/MockCustomers.g.cs Baseline update for new PolyType deserialization constructor
src/Test/AspNetCoreWebsite/Properties/launchSettings.json Reorders settings / adjusts ports for test website
src/Test/AspNetCoreWebsite/Program.cs Enables MessagePack serialization in the ASP.NET Core test website
src/Test/AspNetCoreWebsite/MessagePack/XElementConverter.cs Adds MessagePack converter for XElement
src/Test/AspNetCoreWebsite/MessagePack/CustomComparerProvider.cs Adds custom comparer provider for MessagePack serialization
src/Test/AspNetCoreWebsite/MessagePack/BinaryConverter.cs Adds MessagePack converter for System.Data.Linq.Binary
src/OpenRiaServices.Tools/Framework/DataContractProxyGenerator.cs Adds PolyType constructor-shape deserialization constructor generation in CodeDOM generator
src/OpenRiaServices.Tools.TextTemplate/Framework/CSharpGenerators/Templates/DataContractGeneratorTemplate.ttinclude Adds PolyType constructor-shape constructor generation to T4 template
src/OpenRiaServices.Tools.TextTemplate/Framework/CSharpGenerators/CSharpEntityGenerator.cs Regenerates compiled T4 output including new ctor generation logic
src/OpenRiaServices.Tools.TextTemplate/Framework/CSharpGenerators/CSharpComplexObjectGenerator.cs Regenerates compiled T4 output including new ctor generation logic
src/OpenRiaServices.Server/Test/DomainMethodServerTest.cs Updates tests for stricter argument validation helpers
src/OpenRiaServices.Server/Framework/Data/KnownTypeUtilities.cs Switches known type collection to HashSet and simplifies unioning behavior
src/OpenRiaServices.Server/Framework/Data/DomainServiceDescription.cs Adds GetCustomMethodOrThrow and refactors known-type closure computation
src/OpenRiaServices.Server/Framework/Data/DomainService.cs Uses GetCustomMethodOrThrow during operation resolution
src/OpenRiaServices.Hosting.Wcf/Framework/Wcf/DomainServiceSerializationSurrogate.cs Exposes surrogate helpers/factories for MessagePack integration
src/OpenRiaServices.Hosting.Wcf/Framework/Wcf/DataContractSurrogateGenerator.cs Adds ASP.NET Core-specific surrogate constructor generation path
src/OpenRiaServices.Hosting.AspNetCore/Test/OpenRiaServices.Hosting.AspNetCore.Test/Serialization/SerializationOptionsTests.cs Adds basic MessagePack roundtrip and builder chaining tests
src/OpenRiaServices.Hosting.AspNetCore/Test/OpenRiaServices.Hosting.AspNetCore.Test/Serialization/MessagePack/FilteredTypeShapeProviderTests.cs Adds tests around filtered shape provider behavior and cycles
src/OpenRiaServices.Hosting.AspNetCore/Framework/README.md Documents enabling MessagePack wire format
src/OpenRiaServices.Hosting.AspNetCore/Framework/OpenRiaServices.Hosting.AspNetCore.csproj Adds net10 target and MessagePack + hashing package refs
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/SerializationProvider.cs Splits serializer response-writing APIs into query/invoke/submit + error paths
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MimeTypes.cs Adds MessagePack MIME constant
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePackSerializationProvider.cs New MessagePack serialization provider
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePackSerializationOptions.cs New MessagePack options type
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/MessagePackUtility.cs Shared MessagePack utilities (discriminator/comparers/config)
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/MessagePackResponseEnvelopeBase.cs Adds MessagePack envelope model types
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/MessagePackRequestSerializer.cs Implements MessagePack request/response serialization
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/FilteredTypeShapeProviderOptions.cs Adds options controlling association member inclusion
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/FilteredTypeShapeProvider.cs Implements filtered shape provider wrappers for MessagePack serialization
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/Converters/SurrogateConverter.cs Adds server-side surrogate-based converter for entities/complex types
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/Converters/MethodParametersConverter.cs Adds server-side converter for method parameter maps
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/MessagePack/Converters/ChangeSetEntryConverter.cs Adds server-side ChangeSetEntry converter for submit payloads
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Serialization/DataContractRequestSerializer.cs Updates DataContract serializer to new query/invoke/submit method split
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Operations/SubmitOperationInvoker.cs Uses submit-specific serializer API
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Operations/QueryOperationInvoker.cs Uses query-specific serializer API
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/Operations/InvokeOperationInvoker.cs Uses invoke-specific serializer API
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/OpenRiaServicesOptionsBuilder.cs Adds AddMessagePackSerialization() builder overloads
src/OpenRiaServices.Hosting.AspNetCore/Framework/AspNetCore/OpenRiaServicesConfigurationBuilder.cs Fixes argument validation
src/OpenRiaServices.Client/Framework/OpenRiaServices.Client.csproj Adds MessagePack dependency
src/OpenRiaServices.Client/Framework/Entity.cs Adds MessagePack serialization callbacks integration
src/OpenRiaServices.Client/Framework/ComplexObject.cs Adds MessagePack serialization callbacks integration
src/OpenRiaServices.Client.DomainClients.Http/Framework/OpenRiaServices.Client.DomainClients.Http.csproj Adds MessagePack + hashing deps and links shared utilities
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePackHttpDomainClientFactory.cs Adds MessagePack client factory and serializer/converter setup
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePack/MessagePackMethodParameters.cs Adds wrapper for parameter metadata + values
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePack/MessagePackHttpDomainClient.cs Adds MessagePack HTTP domain client
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePack/Envelopes.cs Adds client-side envelope models
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePack/Converters/ObjectConverter.cs Adds discriminator-based “object” converter for known types
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePack/Converters/MessagePackMethodParametersConverter.cs Adds client-side parameter serialization converter
src/OpenRiaServices.Client.DomainClients.Http/Framework/MessagePack/Converters/ChangeSetEntryConverter.cs Adds client-side ChangeSetEntry converter
src/OpenRiaServices.Client.DomainClients.Http/Framework/Http/MetodParameters.cs Seals MethodParameters
src/OpenRiaServices.Client.DomainClients.Http/Framework/Http/HttpDomainClient.cs Exposes service interface type to derived clients
src/MessagePackWorkarounds.md Adds draft notes on MessagePack limitations/workarounds
NuGet/OpenRiaServices.Client.Core.nuspec Adds package dependencies for MessagePack + hashing
docs/messagepack-serialization.md Adds draft MessagePack wire schema documentation

Comment thread docs/messagepack-serialization.md Outdated
Comment thread src/Test/OpenRiaservices.EndToEnd.Wcf.Test/Data/CustomMethodTests.cs Outdated
Comment thread src/OpenRiaServices.Server/Framework/Data/DomainServiceDescription.cs Dismissed
Comment thread src/OpenRiaServices.Server/Framework/Data/DomainServiceDescription.cs Dismissed
Comment thread src/OpenRiaServices.Server/Framework/Data/DomainServiceDescription.cs Dismissed
Comment thread src/Test/AspNetCoreWebsite/Program.cs Outdated
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Daniel Svensson <Daniel-Svensson@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 62 changed files in this pull request and generated 6 comments.

Comment thread src/Test/AspNetCoreWebsite/MessagePack/BinaryConverter.cs
Comment thread src/Test/AspNetCoreWebsite/MessagePack/CustomComparerProvider.cs
Comment thread docs/messagepack-serialization.md Outdated
Comment thread docs/messagepack-serialization.md Outdated
Comment thread docs/messagepack-serialization.md Outdated
Daniel-Svensson and others added 2 commits June 16, 2026 22:07
fix xdocument comments

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@Daniel-Svensson
Daniel-Svensson enabled auto-merge (squash) June 16, 2026 20:10
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
7.4% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

@Daniel-Svensson
Daniel-Svensson merged commit 7f76a94 into main Jun 16, 2026
6 of 7 checks passed
@Daniel-Svensson
Daniel-Svensson deleted the copilot/msgpack branch June 16, 2026 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Idea: MessagePack serialization

4 participants