The Open RIA Services Blog: Project Lead

Posts in category Project Lead

4/6/2014 Open RIA Services Tooling Released: April Project Update

Categories: Open RIA Services, Project Lead

The tooling for Open RIA Services was soft released a week ago on the Visual Studio Gallery. As of this writing, I see that it has been downloaded 48 times and I have heard of any issues. 

The new RIA Link utility that has made the release possible was written by Eric Schultz from Outercurve. Eric decided not to use NuPattern to create the new RIA linker, but I will keep NuPatterns capabilities in mind for the future.

The new Open RIA Services Link is not part of the Silverlight tab of the project properties, that drop down is the original WCF RIA Services link and use of it will automatically reference the WCF RIA Services dlls causing conflicts with Open RIA Services.

In other news:
NHibernateDomainService has needed additional work done and is not ready for release yet. There are three programmers in different countries currently working on this effort. 

There have been many changes made to the base WCF RIA Services code. These include:

  • Enum.Flags support in queries
  • A fix for client only properties being wiped during load and commit operations
  • Async DomainContext implementation
  • Support long queries by switching to POST instead of GET automatically when the query is long
  • A PCL client for DomainService

Some of these changes are in the already released NuGet packages and some are not. Now that Open RIA Services is fully operational with working tooling I feel much more comfortable making and releasing real substantial changes to the functionality Open RIA Services. I will be releasing new Prerelease versions of the NuGet packages later this week with the above changes fully documented.

I am currently working on getting the DomainController code written, after the events of last week I have decided that my personal priority needs to be getting Open RIA Services working for Universal Apps. The PCL client for DomainService is proving that trying to support the DomainService in newer platforms is going to be difficult and unwieldy. I made a breakthrough this last week when I found the original code for DataController in the history of ASP.NET's source code. DataController was Microsoft's own port of DomainService to Web API and since it was released as Apache 2 we can go ahead and clone that code into Open RIA Services.

Rated 4.00, 1 vote(s). 

1/13/2014 January Status

Categories: Open RIA Services, Project Lead, General

The release of tooling has been pushed back to early February. The part of the tooling that I thought would be the easiest, replacing the WCF RIA Services Link drop down on the Silverlight tab, turned out to be extremely difficult. Countless hours were wasted in the last several weeks attempting different ways to solve the problem, I had one solution completely written but it is failing to work due to a bad cast in unmanaged code deep inside Visual Studio where I can't see what is happening.

A solution has been found in another Outercurve project, NuPattern, which makes extending Visual Studio much easier to do. However, we have to wait for a new version of NuPattern that supports Visual Studio 2013 before our own tooling can be released which is what is pushing us to February.

When the tooling is released it will be complete with the business application, Open RIA Services Class Library, and a Domain Service Wizard that supports EF 6. If anyone is interested in trying the new templates and wizard and doesn't want to download the code to compile it for themselves please let me know and I will give you a download link. Just keep in mind that you will need to manually uninstall anything I give you before you can install the release version.

4.3.0.0 release

When the tooling is released version 4.3.0 of Open RIA Services will be pushed out to NuGet with the prerelease flags removed. There are a few minor fixes included in the 4.3.0 release but otherwise it is identical to the current MyGet release.

4.3.1.0 release

Probably a day after the 4.3.0.0 release I will be pushing the initial 4.3.1-pre1 release to MyGet. Long term I plan to use this same cycle of moving stable releases to NuGet and keeping the prerelease versions on MyGet.

Change Log

4.3.0

1) Move to EF 6 as the baseline for entity framework support

2) Move to Silverlight 5

3) .NET 4.0 and 4.5 dlls for Entity Framework

4) Tooling moved to .NET 4.5 and Visual Studio 2013

5) Compile time code generation triggered for LinkedOpenRiaServerProject instead of LinkedServerProject

6) Compile time support fully triggered by NuGet packages. No external resourced needed for build servers outside of NuGet.

7) Enum.HasFlags support for queries to server (danneesset)

4.3.1-pre1

1) Async interface implementation (danneesset)

2) Fix client properties being wiped (koimad)

Near Future releases

Maher Jendoubi is working on NHibernate support for Open RIA Services. The plan is to get the DomainService working first then we will work on adding support to the Domain Service Wizard.

Once the tooling is working I will be moving my attention to the SignalR based change notification system.

I have had several people ask me about M2M. M2M support is Merijn's and he hasn't been able to work on it yet. He hopes to work on it in the future, in the meantime anyone is welcome to look at his original M2M4RIA code in RIA Services Contrib.

After I get change notification done I need to change my focus to working on the DomainController. Getting the DomainService replaced with the DomainController will be key to getting Open RIA Services working on platforms other than Silverlight. I briefly looked into porting the existing Client.Web project to Portable Class Library but there was too much WCF functionality missing to do an easy port.

This content has not been rated yet. 

10/14/2013 Project Lead Status Report

Categories: Open RIA Services, Project Lead

How to build Open RIA Services

  1. Open RiaServices.sln
  2. Right click the Test folder and unload all of the projects inside it
  3. Build. The solution is using NuGet so if you have the newest version of NuGet installed then all other needed packages should be downloaded automatically.

Pretty simple, except that having to unload all of the unit tests is a bit distressing. The unit tests have two major problems. The refactoring on them is not complete to get them moved off of Microsoft's namespaces. Second, the unit tests themselves are out of date and we non-functional even before I started changing all of the namespaces. I am working on fixing the remaining namespace issues but once that is complete I am looking for advice from the community on how to proceed with modernizing the unit test code.

NuGet feed: https://www.myget.org/F/openriaservices/

  • We do have a nightly build NuGet feed that is being hosted for us by MyGet. As of today the only package available is RiaServicesContrib.EntityFramework

    RiaServicesContrib.EntityFramework
    The first package that we will be releasing will add EF 6 support to Microsoft's WCF RIA Services. At the moment the package compiles and is available from our MyGet feed. However, I would not recommend the package be used until we can get the unit tests that can confirm its functionality working.

    Directories
    The Open RIA Services solution generates code  four different directories: Test, Desktop, Silverlight, and Portable. Test is where you will find the compiled unit tests, Desktop is where you will find the server assemblies and the WPF client assemblies, Silverlight is where you will find the Silverlight client, and Portable is where you will find the new Portable Class Library assemblies as they are created. Long time users of WCF RIA Services may be wondering why there are WPF client assemblies, they are there only for unit testing purposes. As far as I know, they have never actually been used to create a WPF application using RIA Services.
  • Timeline
  • By next week I will have the refactoring of the Unit Tests complete and will be working on getting the Unit Tests to actually run. Once we have some unit tests running we will be able to look at getting NuGet packages on the feed for all of the other pieces of the solution.

This content has not been rated yet. 

10/14/2013 Opening Day

Categories: Open RIA Services, Project Lead

As some people may already have noticed, the source code for Open RIA Services is available on the Codeplex site (http://openriaservices.codeplex.com) and as of today the project is officially open. I have populated the Issues list at Codeplex and almost everything on the issues list is currently listed as up for grabs. If you are interested in working on an issue please take a look at the code, come up with a plan, and then discuss here at the project site.

Later today I will be posting a more comprehensive status of the solution with technical details of the current state of the code, the location of our NuGet feed, and a some general timeframes. If you are interested in contributed to the project I encourage you to contact contributions@outercurve,org and let them know you want to sign the CLA agreement for Open RIA Services. They will send you details and ask which version of the CLA you need to sign.

This content has not been rated yet. 

8/20/2013 First glimpse of DomainController

Categories: Open RIA Services, Project Lead, General

We are still waiting for the code to be released by Microsoft, but in the meantime I thought I would post up an extremly preliminary idea of what the DomainController might look like. In this case, it is the DbDomainController:

public class AddressBookDomainController : DbDomainController<AddressBookContext> 
  protected override void OnDomainCreating(DbDomainBuilder<AddressBookContext> domainBuilder) 
  
    domainBuilder.Repositories.Add<AddressRepository>()
      .RequiresRole(OperationType.All, "AddressEditor")
      .RequiresRole(OperationType.Read, "ContactViewer"); 
    domainBuilder.Repositories.Add<PersonRepository>()
      .RequiresRole(OperationType.All, "PersonEditor")
      .RequiresRole(OperationType.Read, "ContactViewer"); 
    }     
}

The DomainController can look just like the DomainService does with all of the individual CRUD methods in the body, but you will also be able to register repositories with the DomainController and have the CRUD methods picked up from the repository. This is what the repository would look like:

public class PersonRepository 
  AddressBookContext Context {get;set;} 
  public PersonRepository(AddressBookContext context) 
  
    Context = context; 
  
  public IQueryable<Person> GetPeople 
  
    return Context.Persons; 
  
  public void InsertPerson(Person entity) 
  
    DbEntityEntry<LoadRating> entityEntry = this.Context.Entry(entity); 
    if ((entityEntry.State != EntityState.Detached)) 
    
      entityEntry.State = EntityState.Added; 
    
    else
    
      this.Context.People.Add(entity); 
    
  
  public void UpdatePerson(Person currentPerson) 
  
    this.Context.People.AttachAsModified(currentPerson, this.Context); 
  
  public void DeletePerson(Person entity) 
  
    DbEntityEntry<Person> entityEntry = this.Context.Entry(entity); 
    if ((entityEntry.State != EntityState.Detached)) 
    
      entityEntry.State = EntityState.Deleted; 
    
    else
    
      this.Context.People.Attach(entity); 
      this.Context.People.Remove(entity); 
    
  
}


This content has not been rated yet.