Collection Contents Zurück Weiter PDF

MobiLink Benutzerhandbuch

Synchronisationsskripten in .NET schreiben

.NET-Synchronisationsbeispiel


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.


Collection Contents Zurück Weiter PDF