Exemplarische Vorgehensweise: Erstellen einer RIA Services-Klassenbibliothek
In dieser exemplarischen Vorgehensweise erfahren Sie, wie Sie eine Silverlight-Anwendung erstellen, die wiederverwendbare Komponenten in einer WCF RIA Services-Klassenbibliothek enthält.
Die WCF RIA Services-Klassenbibliothek ermöglicht es Ihnen, wiederverwendbare Logik der mittleren Ebene und der Präsentationsebene zu erstellen. Die Verwendung der RIA Services -Klassenbibliothek ist jedoch komplizierter als das Erstellen einer RIA Services -Projektmappe.
Um das Beispiel zu vereinfachen, ist die Klassenbibliothek in dieser exemplarischen Vorgehensweise in der gleichen Projektmappe enthalten wie die Silverlight-Anwendung. Die Klassenbibliothek kann in einer separaten Projektmappe enthalten sein.
Hintergrundinformationen zu RIA Services -Klassenbibliotheken finden Sie in den relevanten Abschnitten des Themas Erstellen von RIA Services-Projektmappen.
Hinweis: |
---|
Wenn Sie keine wiederverwendbaren Komponenten erstellen müssen oder eine allgemeinere exemplarische Vorgehensweise zum Erstellen einer RIA Services -Projektmappe ausführen möchten, gehen Sie wie unter Exemplarische Vorgehensweise: Erstellen einer RIA Services-Projektmappe beschrieben vor. |
Erforderliche Komponenten
Für diese und die anderen exemplarischen Vorgehensweisen in der WCF RIA Services-Dokumentation müssen zusätzlich zu WCF RIA Services und dem WCF RIA Services-Toolkit mehrere erforderliche Programme installiert und korrekt konfiguriert werden, z. B. Visual Studio 2010, die Silverlight Developer-Laufzeit und das Silverlight-SDK. Zudem müssen Sie SQL Server 2008 R2 Express with Advanced Services installieren und konfigurieren und die AdventureWorks OLTP- und LT-Datenbanken installieren.
Ausführliche Anweisungen für jede dieser erforderlichen Komponenten finden Sie in den Themen unter Erforderliche Komponenten für WCF RIA Services. Folgen Sie den Anweisungen in diesen Themen, bevor Sie mit dieser exemplarischen Vorgehensweise fortfahren, um sicherzustellen, dass beim Ausführen der exemplarischen Vorgehensweisen für RIA Services so wenig Probleme wie möglich auftreten.
So erstellen Sie eine Silverlight-Projektmappe, die eine WCF RIA Services-Klassenbibliothek enthält
Erstellen Sie in Visual Studio 2010 ein neues RIA Services -Projekt, indem Sie Datei, Neu und dann Projekt auswählen.
Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie in der Gruppe Silverlight unter Installierte Vorlagen die Vorlage Silverlight-Anwendung aus, und geben Sie für das neue Projekt den Namen ExampleSilverlightApp ein.
Aktivieren Sie im Dialogfeld Neue Silverlight-Anwendung nicht das Kontrollkästchen WCF RIA-Dienste aktivieren für die Anwendung.
Für die Silverlight-Anwendung ist kein RIA Services -Link zwischen dem Silverlight-Projekt und dem Serverprojekt erforderlich, da der RIA Services -Link zwischen den Projekten in der Klassenbibliothek vorhanden ist.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, wählen Sie Hinzufügen aus und dann Neues Projekt.
Das Dialogfeld Neues Projekt hinzufügen wird angezeigt.
Wählen Sie in der Silverlight-Kategorie Installierte Vorlagen die Vorlage WCF RIA Services-Klassenbibliothek aus, und geben Sie AdventureWorksClassLibrary als Namen ein.
Klicken Sie auf OK.
Die Projektmappe enthält jetzt wie in der folgenden Abbildung dargestellt vier Projekte.
Klicken Sie mit der rechten Maustaste auf das Projekt "ExampleSilverlightApp.Web", und wählen Sie Verweis hinzufügen aus.
Das Dialogfeld Verweis hinzufügen wird angezeigt.
Wählen Sie auf der Registerkarte Projekte das Projekt AdventureWorksClassLibrary.Web aus, und klicken Sie auf OK.
Klicken Sie mit der rechten Maustaste auf das Projekt "ExampleSilverlightApp", und wählen Sie Verweis hinzufügen aus.
Wählen Sie auf der Registerkarte Projekte das Projekt AdventureWorksClassLibrary aus, und klicken Sie auf OK.
So erstellen Sie die Bibliothek der mittleren Ebene
Fügen Sie im Projekt "AdventureWorksClassLibrary.Web" ein ADO.NET Entity Data Model mit dem Namen AdventureWorksModel.edmx hinzu. Ausführliche Anweisungen dazu finden Sie unter Exemplarische Vorgehensweise: Erstellen einer RIA Services-Projektmappe.
Schließen Sie im Assistenten für Entity Data Model die Tabelle Product in das Entitätsmodell ein.
Erstellen Sie die Projektmappe (STRG+UMSCHALT+B).
Klicken Sie mit der rechten Maustaste auf das Projekt "AdventureWorksClassLibrary.Web", wählen Sie Hinzufügen aus und dann Neues Element.
Wählen Sie die Vorlage Domänendienstklasse aus, und geben Sie ProductsDomainService als Namen ein.
Klicken Sie auf Hinzufügen.
Das Dialogfeld Neue Domänendienstklasse hinzufügen wird angezeigt.
Wählen Sie in den verfügbaren Datenmodellen, die durch den Domänendienst verfügbar gemacht werden sollen, das Modell Product aus, und klicken Sie auf OK.
Erstellen Sie die Projektmappe (STRG+UMSCHALT+B).
Wählen Sie im Projektmappen-Explorer in jedem Projekt Alle Dateien anzeigen aus.
Beachten Sie, dass der Ordner "Generated_Code" nur im Projekt "AdventureWorksClassLibrary" vorhanden ist. Obwohl kein Code für das Projekt "ExampleSilverlightApp" generiert wurde, können Sie den generierten Code aus dem Projekt "AdventureWorksClassLibrary" verwenden, da ein Projektverweis zwischen den Projekten "ExampleSilverlightApp" und "AdventureWorksClassLibrary" vorhanden ist.
So verwenden Sie den generierten Code im Silverlight-Projekt
Klicken Sie mit der rechten Maustaste auf das Projekt "ExampleSilverlightApp", und wählen Sie Verweis hinzufügen aus.
Fügen Sie einen Verweis auf die System.ServiceModel.DomainServices.Client-Assembly hinzu.
Klicken Sie auf die Registerkarte ".NET", um nach der Assembly zu suchen.
Öffnen Sie im Projekt "ExampleSilverlightApp" die Datei "MainPage.xaml".
Ziehen Sie aus der Toolbox ein DataGrid-Steuerelement in das Grid-Element.
Ein XML-Namespace und Verweise auf Datenassemblys werden hinzugefügt.
Geben Sie für das DataGrid wie im folgenden XAML-Code dargestellt den Namen
ProductsGrid
ein.<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="ExampleSilverlightApp.MainPage" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="https://schemas.microsoft.com/expression/blend/2008" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <data:DataGrid Name="ProductsGrid"></data:DataGrid> </Grid> </UserControl>
Öffnen Sie die CodeBehind-Datei für "MainPage.xaml".
Fügen Sie den folgenden Code hinzu, um die Produkte abzurufen.
Imports System.ServiceModel.DomainServices.Client Imports AdventureWorksClassLibrary.Web Partial Public Class MainPage Inherits UserControl Private _productContext As New ProductsDomainContext Public Sub New() InitializeComponent() Dim loadOp = Me._productContext.Load(Me._productContext.GetProductsQuery()) ProductsGrid.ItemsSource = loadOp.Entities End Sub End Class
using System.ServiceModel.DomainServices.Client; using AdventureWorksClassLibrary.Web; namespace ExampleSilverlightApp { public partial class MainPage : UserControl { private ProductsDomainContext _productContext = new ProductsDomainContext(); public MainPage() { InitializeComponent(); LoadOperation<Product> loadOp = this._productContext.Load(this._productContext.GetProductsQuery()); ProductsGrid.ItemsSource = loadOp.Entities; } } }
Öffnen Sie die Datei "App.Config" im Projekt "AdventureWorksClassLibrary.Web", und kopieren Sie einzeln die Elemente
<connectionStrings>
,<system.serviceModel>
und<httpModules>
sowie die darin enthaltenen Elemente. Fügen Sie jedes Element einzeln in die Datei "Web.config" des Projekts "ExampleSilverlightApp.Web" ein. Die Datei "Web.config" entspricht der Darstellung im folgenden Beispiel, die Datei muss jedoch die relevanten Verbindungsinformationen für Ihre Umgebung enthalten.<configuration> <connectionStrings> <add name="AdventureWorksLT2008Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" /> </connectionStrings> <system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpModules> <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </httpModules> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
Führen Sie die Anwendung aus (F5).