Thursday, August 5, 2010

WCF RIA SERVICES v1.0 - Extra Cool Samples !

Today I’ll write about very interesting scenarios with WCF RIA Services. Read this post!

I. NHibernate

You can quite easily use NHibernate as your DAL. Look at the latest NHibernate Sample from WCF RIA Services Code Gallery with related entities! I have made a simpler example without associations (look below).

01_NHibernate_01 01_NHibernate_02 01_NHibernate_0301_NHibernate_0401_NHibernate_05

II. MVVM

Nikhil Kothari at MIX 10’ has shown how to use WCF RIA Services with MVVM pattern (domain context as a member of view model). Deepesh Mohnani at TechEd 2010 has presented a great WCF RIA Services application with MVVM (for lazy developers: view model inherited from Entity). 

III. Lookups (ComboBoxDataSource)

Kyle McClellan from WCF RIA Services team has added to code gallery a cool example with an extension to support lookups - ComboBoxDataSource. He has implemented cascading ComboBoxes scenario (lookup data sources with parameters like DomainDataSource filters). You can also see how to use lookups for Entity associations. Read about details of the solution here and here.

I have built a simpler example with one ComboBox for Entity association (look below).

02_Lookup_01 02_Lookup_03 02_Lookup_04

IV. T4

Early versions of WCF RIA Services Contrib had contained T4 templates for generating domain services and metadata classes (replacement WCF RIA Services wizard). Now T4 templates have been made obsolete - WCF RIA Services V2 itself is supposed to start using T4 templates

V. Fluent metadata !

The standard approach of defining WCF RIA Services entity metadata is based on attributes. But some developers don't like attributes and ask for a fluent interface instead. Nikhil Kothari has created Fluent API for .NET RIA Services Metadata for July 09’ version. LINQ expressions are mapped to WCF RIA Services. attributes. You can also define your own custom rules (mapped as standard CustomValidation attributte). Nikhil will add these extensions to RIA Services Essentials at codeplex.

Some people and I have migrated these extensions to work with WCF RIA Services V1. I have made example application with fluent metadata (look below).

03_FluentMetadata_02 03_FluentMetadata_03 03_FluentMetadata_01

VI. Offline

Nikhil Kothari at TechEd 09’ South Africa has presented an offline synchronization example (he’ll plan to public update for it).

WCF RIA Services DomainContext is good for offline scenario. WCF RIA Services Contrib contains an extension to serialize it to Isolated Storage and deserialize from.   

I have tried to migrate Nikhil Kothari’s solution to work with WCF RIA services V1 and it … works! I have built simple application using this mechanism (look below).

04_Offline_0104_Offline_0204_Offline_0304_Offline_0504_Offline_06

You can download my examples (NHibernate, Lookup, Fluent metadata, Offline) here:

Monday, August 2, 2010

WCF RIA SERVICES v1.0 Samples - part II

I showed part I of my WCF RIA Services v1.0 samples a  few days ago. Today I’ll continue this topic.

I sign changes in my samples:  

  • migration changes & new features
  • migration changes

Let’s continue …

08. RelatedEntitiesDemo

09. CompositionExample

10. InheritanceExample

The workaround for EF described here no longer needed. I have added modifying entities to my sample application.

11. PresentationModelDemo

12. WcfDemo

WpfClientApp (and SOAP communication) moved to new EndpointsDemo example.

13. EndpointsDemo

By default, only the Binary endpoint is enabled for domain services without additional configuration. You can easily enable another endpoint (ODATA, SOAP, JSON or custom) by registering an endpoint factory in the Web.config file as shown below.

01_Endpoints_01 - mod

The ODATA endpoint has very limited support in V1. There is no Update or LINQ query support. Deepesh Mohnani has a great post about WCF RIA Services endpoints.

Clients in my example:

  • BusinessApplicationDemo (Silverlight, default endpoint)
  • BusinessApplicationDemo.Web (AJAX, JSON)
  • WpfClientApp (WPF, SOAP)
  • ODataClientApp (Silverlight, ODATA)

Below is an example query method in the Ajax client.

01_Endpoints_02 - mod 01_Endpoints_03

14. ASPNetDynamicDataExample

I have used a new project template called ASP.NET Dynamic Data Domain Service Web Application in WCF RIA Services Toolkit.

02_ASPNETDynamicData_01

All samples from part two you can download here

Cheers!!

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!!

Tuesday, July 6, 2010

Expression Blend 4: SketchFlow improvements

What’s new in SketchFlow, which is now distributed as part of Expression Studio 4 Ultimate ?

In Expression Blend 4, the MockupDemonstration sample contains new mockup controls which help you create prototypes quickly and easily. Mockup controls are templates that include common web and desktop controls.  They look like sketches, but are more interactive. You can enable them for any SketchFlow project.

01_SketchFlow_01 01_SketchFlow_02

There is a new pause toggle button in each frame of a SketchFlow Animation. When toggled on, this causes the SketchFlowAnimation to pause at that frame when playing back in the SketchFlow Player. In the SketchFlow Player, there is a play/pause button, too.

Expression Blend has new SketchFlowAnimationTrigger which responds to a frame change or the pausing or completion of a SketchFlow animation.

You can also apply TransitionEffect to a SketchFlow animation when the transition time is greater than 0.

01_SketchFlow_03

In the SketchFlow player you can now pan and resize the screens at runtime. A subtle border surrounds each screen that a user can click and drag to resize the screen. If the original dimensions or the resized area of the screen is larger than the viewing area, scrollbars appear.

The SketchFlow map is now accessed using the Map button, next to the Navigation tab. The map is opened as an overlay above the current screen.

01_SketchFlow_06

When using the Export to Word feature,  a new option has been added. Now you can export feedback in the Word document.

01_SketchFlow_04 01_SketchFlow_05

You can read about other new features (publish to SharePoint, convert feedback to TFS work items, SketchStyles, naming screens) here.

Conditional behaviors and the data store are very useful for prototyping, too.

Below are links that I recommend for learning new SketchFlow features

Thursday, July 1, 2010

Expression Blend 4: Improvements to Photoshop file import

In Expression Blend 4 some layer effects (Drop Shadow, Inner Shadow, Color Overlay, Outer Glow, Inner Glow, Gradient Overlay, Bevel & Emboss, Satin) can now be merged with their layers.

If a layer effect has been applied to a layer, the Layer effect icon appears next to the layer in the Import Adobe Photoshop File dialog box. A layer effect can be imported either by selecting the Flattened bitmap import option or by merging the layer with other layers.

01_PhotoshopImport_01 01_PhotoshopImport_02

Adam Kinney wrote a great post about importing art from Photoshop and making into Silverlight controls. You should read it!

Monday, June 28, 2010

Expression Blend 4: Business Application Development

Today I’ll write about support for MVVM and design-time resources. You can simplify your daily work. Read this post!

Expression Blend offers new sample data, behaviors, and project templates to support MVVM.

It includes the Silverlight/WPF Databound Application project template that offers a basic starting point for MVVM pattern applications. The UserControl with ViewModel item template is very helpful, too.

01_MVVM_0201_MVVM_03

Methods and commands of CLR objects show up just like data in the data pane. You can now bind execution of methods and commands against UI elements with drag and drop. Blend automatically generates an InvokeCommandAction or a CallMethodAction with default trigger!

01_MVVM_06 - Mod 01_MVVM_07

New Blend can generate sample data for CLR classes, even for classes that have private constructors, properties without setters and so on. If your application uses the MVVM pattern, you can generate design-time sample view models and  continue to design your application in the context of this data.

01_MVVM_08 01_MVVM_09 01_MVVM_11 01_MVVM_13 - Mod 01_MVVM_14

Modern applications are often broken into dynamically loaded modules (f.e MEF). At design time, this often leads to problems because not all required resources are available in an individual module. With Blend 4, designers can load in a temporary resource file that is only used for resource resolution at design time, enabling a great design experience even in complicated modular scenarios. When you open a project in Blend and the current document contains resources that cannot be resolved and your solution contains at least one ResourceDictionary file, the Add Design-time Resource Dictionary dialog will open.

01_MVVM_15

Below you see my sample application with all features described in this post. Runtime data is different than design-time data.

01_MVVM_17

Complete solution you can download here.

Useful links