Wednesday, July 28, 2010

WCF RIA SERVICES v1.0 Samples - part I

In February and March I wrote five good posts with samples about WCF RIA Services Beta. I have refreshed all these samples to work with WCF RIA Services v1.0. I have tested almost all new WCF RIA Services RC1/RC2/v1 features, too. In the near future I’ll write three posts about WCF RIA Services v1.0 features and various extensions. Today I’ll present first part of  it.

I sign changes in my samples: 

  • migration changes & new features
  • migration changes 

Let’s start …

1. BusinessApplicationDemo

If a large number of entities can be returned, consider paging on the client by throttling the results. Now, you can use the ResultLimit property on the QueryAttribute.

01_QueryLimit_01 - mod

Deepesh Mohnani has written a great post how to use server throttling with DomainDataSource.

01_QueryLimit_02 - mod

BTW, there are many changes in DomainDataSource. It no longer blocks loads when another load is pending. SubmitChanges on DomainDataSource no longer automatically reloads data. Filter/sort/group descriptors support binding. There is ICommand support for Load/SubmitChanges/RejectChanges. For more details, read breaking changes.

In the latest RIA Services bits, the total server count of the resulting query is not requested by default for paging scenarios. To explicitly request that the Count method is called, you can set the IncludeTotalCount property on the EntityQuery to true. Deepesh Mohnani has a great post about it here.

01_QueryLimit_05 - mod

DomainDataSource will not request for count in non-paging scenarios. As soon as a page size is specified, DomainDataSource will set the IncludeTotalCount property on the EntityQuery for you. By subscribing to the LoadingData event on the DomainDataSource you can override this behavior.

01_QueryLimit_03 - mod

To reduce the load on the middle tier and database you can use the OutputCacheAttribute attribute for output caching. Now, clients can cache the response because communication between the client and server has been changed from SOAP with binary encoding (only POST) to REST with binary encoding (GET or POST).

02_OutputCache - mod

In the current release, validation rules are enforced by raising events through the INotifyDataErrorInfo interface.

When you create a custom validation class or attribute, you must now pass to the Silverlight application the name or names of the members that failed validation (with the ValidationResult). 

04_SyncValidation_01 - mod 04_SyncValidation_02 - mod 04_SyncValidation_03

BTW, you can write custom authorization rules, just like validation. There’s extensible AuthorizationContext. See CustomAuthorization (ala CustomValidation) attribute written by Nikhil Kothari.

Now, you can very easily perform async validation.  The RIA Services Entity class has the ValidationErrors collection to manipulate the errors at any time. When you call Add, Remove, or Clear on the collection, it translates that into the necessary INotifyDataErrorInfo events. Simply modifying the collection will result in the UI showing the updated errors. Jeff Handley writes about it here. BTW, his async validation example contains the CustomValidation attribute which is different approach than you see below.

03_AsyncValidation_01_B - mod 03_AsyncValidation_02 - mod 03_AsyncValidation_01_A - mod 03_AsyncValidation_03

Some good links about validation

2. ConflictsExamples

Support for LinqToSql classes is now only available in the WCF RIA Services Toolkit

Resolve methods for resolving conflicts in different types of DALs are not  supported in this release of WCF RIA Services.

I have added second version of my example with concurrency conflicts - with Entity Framework.

05_RoundTripping_01 - mod

In the current release, the entire original entity is not sent to the server for concurrency checks any more. Now, you can specify which members are sent to the server by marking them with the RoundtripOriginal attribute. In addition, any members that are marked with the ConcurrencyCheck attribute or the TimeStamp attribute are automatically sent to the server.

05_RoundTripping_02 - mod 05_RoundTripping_03 - mod 05_RoundTripping_04 - mod

3. WindowsAuthentication

4. HttpsExample

5. CrossDomainExample

6. RIAServicesLibrariesDemo

7. MultipleDomainContextsExamples


All samples from part one you can download here

Useful links

Start, doc & samples

MIX 10

Channel 9

Silverlight TV

TechEd 10

Silverlight 4 Hands on Labs

Blogs & Sites

Cheers and enjoy!!

No comments: