Im Zuge der Vorbereitungen zur ADC09 habe ich eine Demo geschrieben die mit den .NET RIA Services arbeitet. Leider ist das Zeugs noch nicht mal Beta und so wird sich vermutlich noch eine Menge ändern. .NET RIA Services sind die gefühlte 100ste Methode um Daten in entkoppelten System vom Server zur Anwendung zu bringen (WCF, ADO.NET Dataservcies, ASMX, REST, Socket ectect). Silverlight braucht das, da kein direkter Zugriff auf SQL Server möglich ist (noch nicht). Wenn man das ganze zu Ende denkt ist das nichts anderes als ein Service Layer. Und ein guter Service Layer kann auch von anderen UI Technologien konsumiert werden. In diesem Fall ASP.NET.
Zunächst muss .NET RIA Service July installiert sein. Ausserdem brauchen wir eine Silverlight Business Application.
Die nächsten Schritte nur im Eilverfahren, weil nicht Gegenstand des Blogs. Datenmodell mit z.B. Entity Framework das Orte anzeigt, Domain Service Class (DomainService1) mit der Methode getOrte.
Dann im Web Verzeichnis ASP.NET anlegen. Sicherstellen das die beiden DLL’S Microsoft.Web.Extensions.dll und System.Web.DomainServices.WebControls.dll in der Version 99.0.0.0 im Bin Verzeichnis liegen. Eine Referenz im Projekt darauf erstellen.
Dann erhält man ein neues ASP.NET Server Control DomainDatsource. In meinem Beispiel auf der ADC erzeuge ich damit eine Excel File mit Hilfe eines Repeater Controls.
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="BusinessApplication1.Web.WebForm1" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.DomainServices.WebControls" Assembly="System.Web.DomainServices.WebControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
</head>
<body>
<% Response.ContentType = "application/vnd.ms-excel"%>
<form id="form1" runat="server">
<asp:DomainDataSource runat="server" ID="ds1"
DomainServiceTypeName="BusinessApplication1.Web.DomainService1"
SelectMethod="GetOrte" />
<table>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ds1">
<ItemTemplate>
<tr>
<td>
<%#Eval("plz")%>
</td><td>
<%#Eval("Ort")%>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</form>
</body>
</html>