Skip to content
Pre-release
Pre-release

@Daniel-Svensson Daniel-Svensson released this Sep 1, 2019 · 10 commits to master since this release

Overview

  1. Server is now asynronous which allows it to handles burst in load much better and generally better performance (latency/CPU/memory) under load.
  2. Client networking API the DomainClient is now based on Task instead of using the APM pattern with Begin/End methods
  3. Supported TargetFrameworks has changed
  4. AspNetMembership authentication (AuthenticationBase class) is moved to a new namespace and nuget package
  • Add a reference to *OpenRIAServices.Server.Authenication.AspNetMembership if you use it

Upgrade instructions

  1. Update both all client anor/or server nuget packages to the new version, dont't mix with v4 in the same project.
  2. If you have been using AuthenticationBase class in your server project
    1. add the OpenRiaServices.DomainServices.Server.Authentication.AspNetMembership nuget package to it
    2. Replace penRiaServices.DomainServices.Server.ApplicationServices with penRiaServices.DomainServices.Server.Authentication
    3. Add using for penRiaServices.DomainServices.Server.Authentication.AspNetMembership in file which uses AuthenicationBase
  3. If you have compilation problems in your DomainServices because it overrides methods which do not exist
    then try to overridde the method with the same name but with "Async" as postfix, method signature will be different.
    Eg. replace override of Invoke with override of InvokeAsync.
  4. Fix any additional compilation errors, use changes below for guidance about replacements.

For better scalability (can be done afterwards):

  1. Update your Query and Invoke methods so that they use async/await where relevant.
    E.g if you are using EF6, other ORM frameworks or do network or file access.

Client

Most of the changes are Brekaing changes, even if many of them will only require changes in a small percentage of applicaitons.

1 Change DomainClient contract to Task based async methods (#153)
* Performing multiple loads and waiting for the result is now faster
* Any custom DomainClient or code which interact with DomainClient will no longer compile.
2. Remove old target frameworks

  • Remove netstandard13 (#160)
  • Remove portable class library TargetFramework (#164)
  • Remove Silverlight (#174, #175 and more commits)
  • .Net Framework 4.5 requirement is replaced by 4.6 (will be 4.6.1+)
  1. Move EntityList and QueryBuilder from OpenRiaServices...Data namespace to OpenRiaServices...Client namespace (#182)
  2. Dont allocate PropertyChangedEventArgs if not needed (#155)
    • remove sevaral OnPropertyChanged methods and only keep RaisePropertyChanged
      • If your code does not compile override RaisePropertyChanged instead
    • Memory usage during Load etc is much lighter
  3. Make DomainClientResult internal so it can be removed in the future
  4. Have EntityContainer.LoadEntities return IEnumerable<Entity> instead of IEnumerable
  5. Make WebDomainClient non sealed (#166) non breaking
    Make CallServiceOperation virtual so that the invoke behaviour can be modified in derived classes.
    This should simplify adding bearer based authentication
  6. Change from IEnumerable to IReadOnlyCollection in a few places (#183)
  • Mostly ValidationErrors properties and for IEntityCollection

Behaviour changes

  1. Base DomainContext.Load on DomainContext.LoadAsync instead of other way around
  • The generic Load<TEntity> can be overridden but it will only be called when any of the "Load" methods are called
  1. DomainContext.IsLoading is no longer set to false directly on cancellation.
    Instead a load is only considered done until after it has been cancelled (or completed)

Server

  1. DomainServices are now async #159 and many methods have been renamed with Async suffic
  2. Move aspnet authentication to separate namespace, assembly and nuget package (#173)
    Move Authenication related code from ..Server.ApplicationServices to
  • ..Server.Authentication
  • and ..Server.Authentication.AspNetMembership (AuthenticationBase, UserBase ..)

Other

  • Fixed a number of flaky tests (#161, #172, .. and more commits)
  • use VS2019 for azure pipelines (#148)
  • Have client test start webserver if not already running (#169)
  • Changed folder structure by placing code in src folder (#176)
  • net45 dependency replaced with net46 dependency
    • With slightly better less allocations as a result
  • Removed code market as obsolete (#170)
  • Some modernisation of codebase via refactoring via code analyzers

API Diff

To view difference in API the excelent fuget site is recommended:

Feedback

Please provide feedback, both good and bad to #178

Assets 2

@Daniel-Svensson Daniel-Svensson released this Jul 19, 2019 · 1 commit to support/4.6 since this release

Client

  1. Add transport (OpenRiaServices.DomainServices.Client.Web) to netstandard 2.0 nuget.
    This provides the SoapDomainClientFactory for netstandard / netcoreapp assemblies.
Assets 2

@Daniel-Svensson Daniel-Svensson released this Jun 28, 2019 · 50 commits to master since this release

Client

  1. Add new interface IEntityCollection (#156)
    This is a combination of ICollection<>, INotifyPropertyChanged, INotifyCollectionChanged as well as typed events for Add/Remove of entitites.
    It helps treating collections of entities EntityCollection and EntitySet in a more uniform way.
    It should help OpenRiaServices.M2M integrate better with the core pacakges.
  2. LoadOperation performance improvements (Issue #154)
  • Raise Reset action instead of multiple Add notfications for significantly imroved IU responsiveness when binding to the
    Entitites or AllEntities properties before the load operation is completed.
    • The UI now only updates once instead of potentially once per item
  • Don't allocate multiple NotifyCollectionChangedEventArgs and PropertyChangedEventArgs for each entity loaded.
  • Don't allocate event args if no one is listening
  1. EntityCollection performance improvements (Issue #154)
    • Don't allocate NotifyCollectionChangedEventArgs on each change if no one is listening
Assets 2

Client

  1. Add netstandard 2.0 target
  2. Support query translation for builtin VB operators in projects compiled using VS 2017
  3. Support using "soap" endpoint from client (Cross Platform)
  • native support for all platforms supporting netstandard 2
  • Run this code before creating first DomainContext,
DomainContext.DomainClientFactory = new OpenRiaServices.DomainServices.Client.Web.SoapDomainClientFactory()
{
  ServerBaseUri = "https://my.site.com/",
};
  • Limitations / differences from binary endpoint:
    • Standard query size limitations apply (no workaround as for binary endpoint)
    • invoke operations will use POST even when for operations with HasSideEffect=false
    • soap endpoint must be manually enabled on server

Server

  • Fix namespace for ObjectContextExtensions for OpenRiaServices.EntityFramework (breaking change)

Code generation

Other

  1. Use VS 2017 for compilation
  2. Replaced multiple projects with using built in multitargeting with SDK style projects
  3. All assemblies are strong named ("signed") (#145)
  • The "signed" version of all nuget packages will be depreciated since it is only to replace them with the "normal" nuget packages
  • This will significantly make maintainance easier as well as make it easier to "get started" since there are less variations
  1. Add VS Extension projects to main solution
  • Fix tests for VS Extension project
  • Remove "Interfaces" assembly to reduce complextity and fix some problems

Tooling

Assets 2
Pre-release

@Daniel-Svensson Daniel-Svensson released this Mar 19, 2019 · 62 commits to master since this release

Client

  1. Add netstandard 2.0 target
  2. Support query translation for builtin VB operators in projects compiled using VS 2017
  3. Support using "soap" endpoint from client (Cross Platform)
  • native support for all platforms supporting netstandard 2
  • Run this code before creating first DomainContext,
DomainContext.DomainClientFactory = new OpenRiaServices.DomainServices.Client.Web.SoapDomainClientFactory()
{
  ServerBaseUri = "https://my.site.com/",
};
  • Limitations / differences from binary endpoint:
    • Standard query size limitations apply (no workaround as for binary endpoint)
    • invoke operations will use POST even when for operations with HasSideEffect=false
    • soap endpoint must be manually enabled on server

Server

  • Fix namespace for ObjectContextExtensions for OpenRiaServices.EntityFramework (breaking change)

Code generation

Other

  1. Use VS 2017 for compilation
  2. Replaced multiple projects with using built in multitargeting with SDK style projects
  3. All assemblies are strong named ("signed") (#145)
  • The "signed" version of all nuget packages will be depreciated since it is only to replace them with the "normal" nuget packages
  • This will significantly make maintainance easier as well as make it easier to "get started" since there are less variations
  1. Add VS Extension projects to main solution
  • Fix tests for VS Extension project
  • Remove "Interfaces" assembly to reduce complextity and fix some problems

Tooling

Assets 2

@Daniel-Svensson Daniel-Svensson released this Dec 30, 2018 · 92 commits to master since this release

Code Generation

  • Generates comments on enum members to prevent build warnings CS1574 and CS1591 (#133 , #134)
    (by @icnocop)

Other

  • Tests updated to run successfully on azure pipelines (#137)
  • Som documentation fixes (#135, #136 by @icnocop)
Assets 2

@Daniel-Svensson Daniel-Svensson released this Jun 10, 2018 · 98 commits to master since this release

This is a client only release which solves a fix in the 4.5.2 release which was online for only a short amount of time.

Client

  • Fix Bug where adding calling Attach on an entity which has already been inferred leads to a duplicates in the EntitySet #113 by @uozuAho
  • Improved performance
    • Improvements with many entities in a EntitySet #126 by @uozuAho
    • Use MetaMember in EntityRef and EnttiyCollection for slightly faster creation #120
  • Add implicit conversion from InvokeResult<T> to T #128
  • Make CollectionChanged event implementing INotifyCollectionChanged public (#124)
    For EntitySet and EntityCollection
  • Expose the MetaType and MetaMember classes for fast reflection #129
    They exists in the new OpenRiaServices.DomainServices.Client.Internal namespace and can be used both for fast reflection as well as to see how OpenRiaServices see an entity in case some properties are treated differently than expected.
    • The "Internal" namespace is used to indicate that minor version can still contain breaking changes

Other

  • Added Code of Conduct
  • Adding Contributing guidelines

Tests

  • Stop using depreciated msbuild assembly in test projects (#125)
  • Use roslyn to compile sources in tests #123
  • Stopped using lfs and committed trimmed down version of databases to repro
  • Updated Tooling tets to net46

Acknowledgements

@uozuAho contributed to fixing EntitySet bug and improving its performance

Assets 2
Pre-release

@Daniel-Svensson Daniel-Svensson released this Jun 10, 2018 · 100 commits to master since this release

This release is superseded by https://github.com/OpenRIAServices/OpenRiaServices/releases/tag/v4.5.3
which solves an issue with validation requirements not being properly detected.

For release notes se link above.

Assets 2

@Daniel-Svensson Daniel-Svensson released this Mar 4, 2018 · 112 commits to master since this release

Client

  • Improved performance
    • Reflection improvements which give better performance in many different scenarios #112
    • Large improvements with many entities in a single EntitySet #104 by @uozuAho

Server

  • New feature: Enable configuring domain service and enpoint from code #118
  • Performance improvements
    • Improves startup performance and performance for first request commit e061d7b

Code Generation

  • The T4 code generator now correctly generates Task based async methods for Invoke operations.
    Previously only the default code generator did this

General

  • Moved project to GitHub and updated all nuget packages #114 , #115, #101
  • General test improvements, all but one tests passes (some requires rerun) on VSTS #103, #116

Acknowledgements

  • @uozuAho contributed both with code and inspiration for further performance tweaking
Assets 2
You can’t perform that action at this time.