Synchronisationsskripten in .NET schreiben
Das folgende Beispiel ändert eine vorhandene Anwendung, um zu beschreiben, wie Sie die .NET-Synchronisationslogik verwenden können, um auf das Ereignis "authenticate_user" zu reagieren. Es erstellt für authenticate_user ein C#-Skript namens AuthUser.cs. Dieses Skript sucht das Kennwort des Benutzers in der Tabelle user_pwd_table und authentifiziert den Benutzer anhand dieses Kennworts.
Hinweis:In diesem Abschnitt wird ein einfaches Beispiel grundlegender .NET-Synchronisationslogik beschrieben. Die Gründe für die Verwendung eines benutzerdefinierten Verfahrens zur Benutzerauthentifizierung sind typischerweise die Integration mit vorhandenen DBMS-Schemata zur Benutzerauthentifizierung oder das Bereitstellen benutzerdefinierter Funktionen, wie etwa der Mindestlänge oder der Gültigskeitsdauer von Kennwörtern. MobiLink stellt auch ein integriertes Standardverfahren bereit.Weitere Hinweise zur MobiLink-Authentifizierung finden Sie unter Verfahren zur Benutzerauthentifizierung wählen |
Sie fügen der Datenbank zunächst die Tabelle user_pwd_table hinzu. Führen Sie hierzu die folgende Interactive SQL-Anweisung aus:
CREATE TABLE user_pwd_table ( user_name varchar(128) PRIMARY KEY NOT NULL, pwd varchar(128) )
Fügen Sie der Tabelle anschließend einen Benutzer und ein Kennwort hinzu:
INSERT INTO user_pwd_table VALUES( 'user1', 'myPwd' )
Erstellen Sie ein Verzeichnis für Ihre .NET-Assembly. Zum Beispiel:
mkdir c:\mlexample
Erstellen Sie eine Datei mit dem Namen AuthUser.cs und folgendem Inhalt:
Weitere Hinweise finden Sie unter Verbindungsereignis authenticate_user.
using System; using iAnywhere.MobiLink.Script;
namespace MLExample
{
public class AuthClass
{
private DBConnection _conn;
/// AuthClass constructor.
public AuthClass( DBConnectionContext cc )
{
_conn = cc.GetConnection();
}/// The DoAuthenticate method handles the 'authenticate_user' /// event. /// Note: This method does not handle password changes for /// advanced authorization status codes.
public void DoAuthenticate(
ref int authStatus,
string user,
string pwd,
string newPwd )
{
DBCommand pwd_command = _conn.CreateCommand();
pwd_command.CommandText = "select pwd from user_pwd_table"
+ " where user_name = ? ";
pwd_command.Prepare(); // add a parameter for the user name
DBParameter user_param = new DBParameter();
user_param.DbType = SQLType.SQL_CHAR;
// we need to set the size for SQL_VARCHAR
user_param.Size = (uint)user.Length;
user_param.Value = user;
pwd_command.Parameters.Add( user_param ); // fetch the password for this user.
DBRowReader rr = pwd_command.ExecuteReader();
object[] pwd_row = rr.NextRow();
if( pwd_row == null ) {
// user is unknown
authStatus = 4000;
} else {
if( ((string)pwd_row[0]) == pwd ) {
// password matched
authStatus = 1000;
} else {
// password did not match
authStatus = 4000;
}
}
pwd_command.Close();
rr.Close();
return;
}
}
}Die Methode MLExample.AuthClass.DoAuthenticate verarbeitet das Ereignis authenticate_user. Sie akzeptiert den Benutzernamen und das Kennwort und gibt einen Autorisierungsstatuscode zurück, der über den Erfolg bzw. Misserfolg der Prüfung Auskunft gibt.
Kompilieren Sie die Datei AuthUser.cs. Sie können hierzu die Befehlszeile oder Visual Studio .NET verwenden.
Folgende Befehlszeile kompiliert z.B. AuthUser.cs und generiert eine Assembly namens example.dll in c:\mlexample. Ersetzen Sie Ihr Installationsverzeichnis durch asany9.
csc /out:c:\mlexample\example.dll /target:library /reference:\asany9\win32\iAnywhere.MobiLink.Script.dll AuthUser.cs
Registrieren Sie den .NET-Code für das Ereignis "authenticate_user". Die Methode, die ausgeführt werden muss (DoAuthenticate), befindet sich im Namespace MLExample und der Klasse AuthClass. Führen Sie die folgenden SQL-Anweisungen aus:
call ml_add_dnet_connection_script( 'ex_version', 'authenticate_user', 'MLExample.AuthClass.DoAuthenticate' ) COMMIT
Anschließend starten Sie den MobiLink-Synchronisationsserver mit der folgenden Option. Diese Option bewirkt, dass MobiLink alle Assemblies in c:\mlexample lädt:
-sl dnet ( -MLAutoLoadPath=c:\mlexample )
Wenn nun ein Benutzer mit der Version "ex_version" synchronisiert, wird er mit dem Kennwort aus der Tabelle user_pwd_table authentifiziert.
SQL Anywhere Studio 9.0.1
Copyright © 1989–2004 Sybase Inc. Teil-Copyright © 2001–2004 iAnywhere Solutions Inc. Alle Rechte vorbehalten.