Die meisten ASP.NET-Webs haben irgendwo einen Bereich, der nur bestimmten Benutzern zugänglich sein soll
und somit eine Anmeldung (Login) erforderlich machen. Zu diesem Zweck stellt
Microsoft in seinen ASP.NET-Entwicklungsumgebungen eigene Steuerelemente
bereit, die sich mit wenigen Mausklicks in die Web-Seiten integrieren lassen
und dem Entwickler eine Menge Arbeit abnehmen.
Basis dieser Steuerelemente sind sog. Provider, die die Daten für die
Benutzerverwaltung bereitstellen. Aktuell braucht man für den kompletten
Satz an Features folgende drei Provider:
- Membership-Provider (Mitgliedschaft, d.h.
Benutzerdaten)
- Role-Provider (Rollen)
- Profile-Provider (Profildaten, d.h. weitergehende
Benutzerdaten)
Hinter diesen Providern, die in der web.config konfiguriert
werden, steht eigentlich immer eine Datenbank, die allerdings entsprechend
vorbereitet werden muss. Setzt man z.B. im Hintergrund einen Microsoft
SQL-Server 2000 ein, so braucht man in der Datenbank, die als
Provider-Datenquelle eingesetzt werden soll, eine ganze Reihe Tabellen, Stored
Procedures et cetera.
Auch hierbei hat Microsoft den Entwickler nicht alleingelassen: im Ordner
<Windows-Ordner>\Microsoft.NET\Framework\<Versionsnummer> gibt
es das Tool aspnet_regsql.exe, mit dem man entweder über die
Kommandozeile oder ganz bequem per Dialog eine Datenbank in einem Rutsch mit
allen erforderlichen Objekte bestücken kann.
So weit so gut ... aber was soll man tun, wenn man keinen Zugriff auf die
Oberfläche des Webservers hat, auf dem das Projekt später gehostet wird, um das
Tool auszuführen? Die wenigsten Provider erlauben einen Remote-Zugriff...
Auch da hat man in Redmond mitgedacht. Es existiert eine Funktion innerhalb
der Klasse System.Web.Management.SqlServices namens
install, die genau das gleiche tut, wie das Tool
aspnet_regsql.exe. Der entscheidende Vorteil dabei ist, man kann sich rund um
diese Funktion eine kleines Webform bauen, auf dem Server ablegen und dort
aufrufen.
Peter A. Bromberg von
eggheadcafe.com hat in einem interessanten Artikel über die Integration von
Membership-, Role- und Profile-Providern eine Vorlage geliefert, auf der der
folgende Code basiert:
Kümmern wir uns zunächst um das WebForm. Viel Code braucht man da nicht...
SetupASPNetDatabaseVB.aspx
<%@ Page Language="VB" AutoEventWireup="false"
CodeFile="SetupASPNetDatabaseVB.aspx.vb"
Inherits="SetupASPNetDatabaseVB" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Set Up ASP.NET Role, Membership and Profile Database Features</title>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<td>SERVER:</td>
<td>
<asp:TextBox ID="txtServer" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>USERNAME:</td>
<td>
<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>PASSWORD:</td>
<td>
<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>DATABASE:</td>
<td>
<asp:TextBox ID="txtDatabase" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Button ID="Button1" runat="server" Text="Setup Database" />
</td>
<td>
<asp:Label ID="Label1" runat="server"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</html>
Wie man sieht sind in der Tabelle lediglich 4 Textboxen untergebracht, in die
die für install benötigten Informationen eingetragen werden, ein
Button zum Abschicken des Formulars und ein Label-Feld für die Rückmeldung.
Schön an der Lösung ist, dass der eigentliche Code (hier VB, bei Peter
Bromberg C#) fast noch übersichtlicher ist, denn es ist wie erwähnt nur ein
Aufruf...
SetupASPNetDatabaseVB.vb
Imports System.Web.Management
Partial Class SetupASPNetDatabaseVB
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.Label1.Text = ""
If IsPostBack Then
Try
System.Web.Management.SqlServices.Install( _
Me.txtServer.Text, _
Me.txtUserName.Text, _
Me.txtPassword.Text, _
Me.txtDatabase.Text, _
SqlFeatures.All)
Me.Label1.Text = "Complete!"
Catch ex As Exception
Me.Label1.Text = ex.Message
End Try
End If
End Sub
End Class
Legt man nun die ASPX-Seite und die Code-Behind-Datei auf den Zielserver und
ruft sie auf, so hat man in Sekundenschnelle eine vorhandene SQL-Server 2000
Datenbank als Provider-Basis aufgebohrt.
weitere Informationen