Skip to content

Releases: OpenRIAServices/OpenRiaServices

MessagePack protocol preview.1 (5.10.0 + AspNetCore 1.6.0)

17 Jun 04:09
7f76a94

Choose a tag to compare

AspNetCore 1.6.0

  • Added MessagePack wire-format support (application/vnd.msgpack) via #591

Enable MessagePack on the server

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenRiaServices()
    .AddMessagePackSerialization();

Optionally pass a custom Nerdbank.MessagePack.MessagePackSerializer to add converters or a custom comparer provider:

builder.Services.AddOpenRiaServices()
    .AddMessagePackSerialization(opt =>
    {
        opt.Serializer = new Nerdbank.MessagePack.MessagePackSerializer()
        {
            // custom converters / comparer provider
        };
    });

Client (OpenRiaServices.Client.DomainClients.Http)

  • Added MessagePackHttpDomainClientFactory — a DomainClientFactory that communicates with the server using MessagePack over HTTP

Enable MessagePack on the client

DomainContext.DomainClientFactory =
    new MessagePackHttpDomainClientFactory(baseUri, httpClientFactory);

Optionally pass a custom serializer:

var serializer = new MessagePackSerializer()
{
    // custom converters / comparer provider
};

DomainContext.DomainClientFactory =
    new MessagePackHttpDomainClientFactory(baseUri, httpClientFactory, serializer);

For performance benchmark data see PR #591.

What's Changed

AspNetCore 1.5.0 and OpenRia 5.9.0

11 Jun 10:12
585cb6c

Choose a tag to compare

AspNetCore 1.5.0

  • Allow configuring Serializer security settings

    You can configure reader quotas to limit resource consumption and mitigate denial-of-service (DoS) attacks.
    By default all quotas are set to their maximum values to preserve backward compatibility.

    See AspNetCore README for more details and sample code.

  • Added QUERY HTTP method support for non-side-effect operations (Query and non-mutating Invoke)

    • Non-side-effect operations now accept GET, POST, and QUERY requests (previously GET and POST only)
    • Side-effect operations remain POST-only

Client 5.9.0

  • Added MaxQueryStringLength setting to HttpDomainClientFactory (default 2048)
    • Controls the query string length threshold at which GET requests are automatically promoted to POST or QUERY
    • Previously this threshold was hardcoded
  • Added UseQueryHttpMethod setting to HttpDomainClientFactory (default false)
    • When enabled, GET requests exceeding MaxQueryStringLength are promoted to QUERY instead of POST
    • QUERY is a safe, idempotent HTTP method that carries a request body — suitable for read operations with large query parameters
    • Requires the server to support the QUERY method (i.e. using compatible OpenRiaServices.Hosting.AspNetCore)
  • EntityCollection IList indexer now throws instead of returning null when out of range @Copilot in #581
DomainContext.DomainClientFactory = new BinaryHttpDomainClientFactory(baseUri, handler)
{
    MaxQueryStringLength = 4096,     // allow longer query strings before falling back
    UseQueryHttpMethod = true,       // use QUERY instead of POST on fallback
};

What's Changed

  • EntityCollection fixes: IList indexer should not return null, update INotifyCollectionChanged index calculation by @Copilot in #581
  • Add SerializationOptions for reader quotas and compression dictionary by @Copilot in #578
  • Add MaxQueryStringLength and UseQueryHttpMethod settings to HttpDomainClientFactory by @Copilot in #582
  • Refactor DataContractHttpDomainClient by extracting transport logic into HttpDomainClient by @Copilot in #583
  • Configure Copilot cloud agent to run on Windows (windows-latest) by @Copilot in #584
  • Document changelog and README update expectations for contributors and agents by @Copilot in #586
  • run code generation tests on net10 by @Daniel-Svensson in #588

Full Changelog: v5.8.0...v5.9.0

v5.8.0 + efcore 4 1.0

13 May 07:05
46ad68a

Choose a tag to compare

This release gives some ❤️ to AvaloniaUI and other frameworks which use IList for data binding.

Client

  • Improved support for data binding of EntitySet and EntityCollection
    • Now works with AvaloniaUI and frameworks which use IList for data binding
      • Added AvaloniaUI specific tests to ensure data-binding works as expected
    • Improved performance for WPF (with less overhead)
  • New public API (for EntitySet and EntityCollection)
    • Make Contains(entity) public
    • Add public indexer for EntityCollection
    • Add IList interface to EntityCollection and EntitySet
    • Add IReadOnlyList<T> interface to EntityCollection and EntitySet and LoadResult
    • Add IList<T> interface to EntityCollection
  • Nullability annotations for EntitySet and EntityCollection
  • Nullability annotations for many parts of the most used public API

Server

  • ChangeSet now throws an InvalidOperationException if accessed outside a submit operation, where ChangeSet previously returned null.
  • Added Nullability annotations for a few core types of public API

Other

  • Changed parameter validation to use ArgumentNullException.ThrowIfNull for better performance and more consistent exception messages
    • IMPORTANT: This is a breaking change if you expect ArgumentNullException thrown by OpenRiaServices for empty strings
  • Fixed build pipeline problems after updating to VS 2026
  • Improved polyfills to allow modernization of the codebase
  • Analyzer fixes
    • Fix CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()'
    • Fix MSTEST****: varius test related

What's Changed

New Contributors

Full Changelog: v5.7.0...v5.8.0

v5.8.0 - preview.2

26 Apr 20:48
44e41cf

Choose a tag to compare

v5.8.0 - preview.2 Pre-release
Pre-release

For 5.8.0 changes see: https://github.com/OpenRIAServices/OpenRiaServices/blob/main/Changelog.md#580

What's Changed

Full Changelog: v5.8.0-preview.1...v5.8.0-preview.2

v5.8.0-preview.1 - AvaloniaUI ❤️Edition

13 Apr 13:06
d08e158

Choose a tag to compare

This release gives some ❤️ to AvaloniaUI and other frameworks which use IList for data binding.

Client

  • Improved support for data binding of EntitySet and EntityCollection
    • Now works with AvaloniaUI and frameworks which use IList for data binding
      • Added AvaloniaUI specific tests to ensure data-binding works as expected
    • Improved performance for WPF (with less overhead)
  • New public API (for EntitySet and EntityCollection)
    • Make Contains(entity) public
    • Add public indexer for EntityCollection
    • Add IList interface to EntityCollection and EntitySet
    • Add IReadOnlyList<T> interface to EntityCollection and EntitySet and LoadResult
    • Add IList<T> interface to EntityCollection
  • Nullability annotations for EntitySet and EntityCollection

Other

  • Fixed build pipeline problems after updating to VS 2016
  • Analyzer fixes
    • Fix CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()'
    • Fix MSTEST****: varius test related

What's Changed

Full Changelog: v5.7.0...v5.8.0-preview.1

AspNetCore 1.4.0 & 5.7.0 & EF Core 4.0.0

02 Apr 13:50
84dd62c

Choose a tag to compare

AspNetCore 1.4.0

New Features

  • Fully tested on .NET 10
  • Return status code 400 (Bad Request) on parameter errors such as null when null is not allowed (#551, #546)
  • Added support for XML serialization as an alternative to binary serialization format (#546)
    • Server can now intelligently handle both binary and XML content types

      var builder = WebApplication.CreateBuilder(args);
      builder.Services.AddOpenRiaServices(o => { } )
          .AddXmlSerialization();

Bugfixes

  • #553 - Buffer management bug for responses - small probability but HIGH SEVERITY bug
  • #552 - Incorrect decoding of string parameters

EntityFrameworkCore 4.0

  • Add .NET 10 target framework compiled against EF Core 10 (#549)
    • NOTE: EF Core 10 contains BREAKING CHANGES, ensure all other assemblies are compiled against EntityFrameworkCore 10

Core libraries (5.7.0)

Major Features

  • DateOnly and TimeOnly (#539, #540)

    DateOnly and TimeOnly are now fully supported primitive type, but REQUIRES .NET 10 runtime for serialisation.

  • XML Support

    Added a new class OpenRiaServices.Client.DomainClients.XmlHttpDomainClientFactory that can be used to enable text-based XML communication with the server.

    Sample usage:

    DomainContext.DomainClientFactory = new XmlHttpDomainClientFactory(baseUri, httpClientFactory);

Server

  • EntityAssociationAttribute should now be used instead of AssociationAttribute (which is obsolete on .NET)
    • While there is code for backwards compatibility, please update all code to use the new attribute since backwards compatibility may be removed in the future

Client

  • Improves clients NotFound errors (will now use OperationErrorStatus.NotFound)
  • Fix handling of empty string, when returned from invoke method (POST), it was incorrectly converted to null on client

General Improvements

  • Fixed typo in OutputCacheAttribute.cs (#528) by @icnocop
  • Replace ReaderWriterLockSlim with ConcurrentDictionary for improved perf in DataContractSurrogateGenerator (#529)
  • Updated some dependencies
  • Update CI pipelines - running VS 2026 and compiling using C#14
  • Running many tests on .NET 10

What's Changed

New Contributors

Full Changelog: v5.6.0...v5.7.0

AspNetCore 1.3.1

18 Nov 14:32
7eaf1f2

Choose a tag to compare

New HTTP status codes

  • Submit can now return 409 and 422 (for conflicts and validation failure)
  • Use 415 unsupported media type instead of 400 for unsupported content type

What's Changed

Full Changelog: v5.6.0...aspnetcore-1.3.1

AspNetCore 1.3.0 & 5.6.0

14 Nov 14:10
f8a2c7f

Choose a tag to compare

AspNetCore 1.3.0 (#518)

  • New Http status codes returned
    • 401 unauthorized, 403 forbidden and 422 Unprocessable Entity (for validation failure)
    • IMPORTANT: POSSIBLE BREAKING CHANGE: this will not work with the obsolete wcf based domain client
  • New Methods on IServiceCollection for Setup and registration of DomainServices
    • AddOpenRiaServices now accept a callback for configuring Options
      • AddOpenRiaServices(Action<OpenRiaServicesOptions> configure)
    • New helper methods for registering DomainServices
      • AddDomainService<TDomainService>()
      • AddDomainService(typeof(DomainService))
      • AddDomainServices(params IEnumerable<Assembly>)
  • Simplified MapOpenRiaServices
    • Add AddRegisteredDomainServices() to "map" (add endpoints) for all registered domain services
    • Added new overloads of MapOpenRiaServices() which do not require a callback, it will map app registered domain services
    • MapOpenRiaServices now throws if there are no domain services registered
  • Added new OpenRiaServicesOptions for configuration openria services
    • Se Readme for a description of the settings
  • The StatusCodes property on exception will now be 403 when authorization fails but the user is logged in as an authenticated user (it was 401 before)
  • Add more nullability annotations to AspNetCore hosting

5.6.0

This is proably the last version with for WCF based hosting

BREAKING CHANGES:

  • Drops support for .NET6 and .netstandard2.0
  • Stop shipping WCF based domainclient as part of OpenRiaServices.Client.Core nuget
    The WebDomainClient has been depreciated since 2023
    • code gen
  • NOTE: WCF based hosting is considered depreciated and will be removed in the near future

Client Improvements

  • Handle exceptions when Exception StatusCode is 403 (Required for AspNetCore 1.3.0)
  • Set Accept header to "application/msbin1" (#521) for BinarHttpDomainClient
  • Client nugets no longer have a dependency on System.ServiceModel

General Improvements

  • Update nuget package dependencies

  • Update to latest version of Mono.Cecil

  • Updated integration test to run on .NET 8 instead of .NET Framework

  • Updated E2E integration tests no longer use WCF based client

  • Added some trimming annotations

  • What's Changed

  • Update nugets and Add some trimming annotations by @Daniel-Svensson in #517

  • Update azure-pipelines.yml for Azure Pipelines by @Daniel-Svensson in #519

  • Use sonarcloudv3 in azure-pipelines.yml by @Daniel-Svensson in #520

  • Set accept header for binary endpoint by @Daniel-Svensson in #521

  • AspNetCore: Add Options and improve Setup by @Daniel-Svensson in #518

  • Drop support for .NET 6, target .NET8 as minimum and update nuget dependencies by @Daniel-Svensson in #523

Full Changelog: v5.5.0...v5.6.0

v5.5.0 / EntityFrameworkCore 3.1.0 / AspNetCore 1.2.0

12 Jun 13:58
94081df

Choose a tag to compare

OpenRiaServices.EntityFrameworkCore 3.1.0

  • Initial support for Owned Entities for one-to-one navigation properties (#500)
    • Owned entities without explicit keys are mapped to OpenRiaServices's [Complex Types]
    • Owned entities with explicit keys are generated as normal "Entities" but are automatically annotated with [Composition]
    • EFCore "Complex Types" introduced in EFCore 8.0 does not have any special handling
  • Add new helper method AttachAsModified<TEntity>(TEntity entity) (#506)
    • It works similar to the existing AttachAsModified extension methods on DbSet but
      • is smarter (works with and without original entity)
      • reduces code that needs to be written and works both with and without "OriginalEntity" (RoundTripAttribute)
  • Add package README to OpenRiaServices.Server.EntityFrameworkCore

AspNetCore 1.2.0

  • Add support for specifying endpoints routes (#508, issue: #507)
    You can choose between 3 different approaches to how the endpoint routes are generated.
    See AspNetCore readme for more details.
    • WCF will generate the same routes as WCF RIA Services Some-Namespace-TypeName.svc/binary/Method
    • FullName will generate routes with the full name of the DomainService Some-Namespace-TypeName/Method
    • Name will generate routes with the short name of the DomainService TypeName/Method

Code generation

  • Log whole Exceptions in DomainServiceCatalog instead of just message (#502), for better error messages on code generation failure
  • Call "dotnet CodeGenTask.dll" instead of "CodeGenTask.exe" #503
  • Support for the 3 different approaches to how the endpoint routes are generated for AspNetCore hosting (#508)
  • Replace obsolete AssociationAttribute with new EntityAssociationAttribute on client (#509)

Client

  • Replace obsolete AssociationAttribute with new EntityAssociationAttribute on client (#509)
    • The client currently detect AssociationAttribute but it will be removed in future versions.
    • Ensure you have the corresponding version of the Code generation
  • BinaryHttpDomainClientFactory has a new constructor taking in an Func<Uri, HttpClient> so that the callback has access to the uri passed to the DomainContext
    • If the HttpClient factory method sets BaseAddress on the httpClient then the address vill be preserved and used for server calls.

What's Changed

Full Changelog: v5.4.3...v5.5.0

EntityFrameworkCore 3.0.0

14 Apr 11:29
6c34153

Choose a tag to compare

OpenRiaServices.Server.EntityFrameworkCore 3.0.0

Add EF Core 8 support by @ehsangfl @Daniel-Svensson in #496

  • Target .NET 8.0 and EF Core 8
    • IMPORTANT EF Core 8 is NOT backwards compatible with models (DbContexct) classes compiled against earlier versions of EF Core.
      Methods such as HasName in OnConfigure will throw MethodNotFoundException
      This means that to use EF Core 8 all referenced EF Core projects needs to be updated to 8.0
  • Drops support for earlier TargetFrameworks
    • Due to limitations above with binary breaking changes in EF Core earlier frameworks will not be supported to reduce risk of mixing EF Core versions.
    • Use the 2.0.* version of the nuget package if you need support for earlier versions of EF Core

Other internal changes

  • Remove a bunch of "#if NET6_0" so it works on multiple versions of .NET
  • update nuget packages
    • MSTest to 3.3.1
    • Microsoft.CodeAnalysis.* 4.9.2
    • Microsoft.Build.Locator 1.7.8
    • remove Microsoft.EntityFrameworkCore.Design
    • Update to "Microsoft.NET.Test.Sdk" 17.9.0