Walkthrough: Creating a RIA Services Class Library

[WCF RIA Services Version 1 Service Pack 2 is compatible with either .NET framework 4 or .NET Framework 4.5, and with either Silverlight 4 or Silverlight 5.]

In this walkthrough, you learn how to create a Silverlight application that includes reusable components in a WCF RIA Services class library.

The WCF RIA Services class library enables you to create reusable middle-tier and presentation-tier logic. However, using the RIA Services class library is more complicated than creating a RIA Services solution.

To simplify the example, this walkthrough shows the class library in the same solution as the Silverlight application. The class library can exist in a separate solution.

For more some background on RIA Services class libraries, see the relevant sections of the Creating RIA Services Solutions topic.


If you do not need to create reusable components or if you want to see a more introductory walkthrough about creating a RIA Services solution, see Walkthrough: Creating a RIA Services Solution.


This and the other walkthroughs presented in the WCF RIA Services documentation require several prerequisite programs, such as Visual Studio 2010 and the Silverlight Developer Runtime and SDK, be installed and configured properly, in addition to WCF RIA Services and the WCF RIA Services Toolkit. They also require installing and configuring SQL Server 2008 R2 Express with Advanced Services and installing the AdventureWorks OLTP and LT database.

Detailed instructions for the satisfaction of each of these prerequisites are provided by the topics within the Prerequisites for WCF RIA Services node. Follow the instructions provided there before proceeding with this walkthrough to ensure that you encounter as few problems as possible when working through this RIA Services walkthroughs.

To create a Silverlight solution that contains a WCF RIA Services class library

  1. Create a new RIA Services project in Visual Studio 2010 by selecting File, New, and then Project.

    The New Project dialog box appears.

  2. Select the Silverlight Application template from Silverlight group of the Installed Templates and name the new project ExampleSilverlightApp.

  3. In the New Silverlight Application dialog box, do not check the Enable WCF RIA Services box for the application.

    The Silverlight application does not need a RIA Services link between the Silverlight project and the server project because the RIA Services link will exist between the projects in the class library.

  4. In Solution Explorer, right-click the solution, select Add, and then select New Project.

    The Add New Project dialog box appears.

  5. In the Silverlight category Installed Templates, select the WCF RIA Services Class Library template and name it AdventureWorksClassLibrary.


  6. Click OK.

    Your solution now contains four projects as shown in the following illustration.


  7. Right-click the ExampleSilverlightApp.Web project and select Add Reference.

    The Add Reference dialog box appears.

  8. On the Projects tab, select the AdventureWorksClassLibrary.Web project and click OK.

  9. Right-click the ExampleSilverlightApp project and select Add Reference.

  10. On the Projects tab, select the AdventureWorksClassLibrary project and click OK.

To create the middle-tier library

  1. In the AdventureWorksClassLibrary.Web project, add an ADO.NET Entity Data Model named AdventureWorksModel.edmx. For steps on how to do this, see Walkthrough: Creating a RIA Services Solution.

  2. In the Entity Data Model wizard, include the Product table in the entity model.

  3. Build (Ctrl+Shift+B) the solution.

  4. Right-click the AdventureWorksClassLibrary.Web project, select Add, and then select New Item.

  5. Select the Domain Service Class template and name it ProductsDomainService.

  6. Click Add.

    The Add New Domain Service Class dialog box appears.

  7. Select Product from the available data models to expose through the domain service and click OK.

  8. Build (Ctrl+Shift+B) the solution.

  9. In Solution Explorer, select Show All Files in each project.

    Notice the Generated_Code folder only exists in the AdventureWorksClassLibrary project. Although no code was generated for the ExampleSilverlightApp project, you can still use the generated code from the AdventureWorksClassLibrary project because a project reference exists between the ExampleSilverlightApp and AdventureWorksClassLibrary projects.

To use the generated code in the Silverlight project

  1. Right-click the ExampleSilverlightApp project and select Add Reference.

  2. Add a reference to the System.ServiceModel.DomainServices.Client assembly.

    To find the assembly, select the .NET tab.

  3. In the ExampleSilverlightApp project, open the MainPage.xaml.

  4. From the Toolbox, drag a DataGrid control to within the Grid element.

    An XML namespace and references to Data assemblies are added.

  5. Name the DataGridProductsGrid, as shown in the following XAML.

        d:DesignHeight="300" d:DesignWidth="400">
        <Grid x:Name="LayoutRoot" Background="White">
          <my:DataGrid Name="ProductsGrid"></my:DataGrid>
  6. Open the code-behind for MainPage.xaml.

  7. Add the following code to retrieve the products.

    Imports System.Windows.Ria
    Imports RIAServicesExample.Web
    Partial Public Class MainPage
        Inherits UserControl
        Private _productContext As New ProductDomainContext
        Public Sub New()
            Dim loadOp = Me._productContext.Load(Me._productContext.GetProductsQuery())
            ProductGrid.ItemsSource = loadOp.Entities
        End Sub
    End Class
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using RIAServicesExample.Web;
    using System.Windows.Ria;
    namespace RIAServicesExample
        public partial class MainPage : UserControl
            private ProductDomainContext _productContext = new ProductDomainContext();
            public MainPage()
                LoadOperation<Customer> loadOp = this._productContext.Load(this._productContext.GetProductsQuery());
                CustomerGrid.ItemsSource = loadOp.Entities;
  8. Open the App.Config file in the AdventureWorksClassLibrary.Web project, and copy individually the <connectionStrings>, <system.serviceModel>, and <httpModules> elements and the elements they contain. Paste each element individually into the Web.config file of the ExampleSilverlightApp.Web project. The Web.config file will look similar to the following example, but your file must provide the relevant connection information for your environment.

            <add name="AdventureWorksLT2008Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
            <compilation debug="true" targetFramework="4.0" />
            <add name="DomainServiceModule" type="System.Web.Ria.Services.DomainServiceHttpModule, System.Web.Ria, Version=, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
          <modules runAllManagedModulesForAllRequests="true"/>
  9. Run (F5) the application.