Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Serveradministration » MobiLink-Server-APIs » Synchronisationsskripten in .NET erstellen

 

.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.

♦  So erstellen Sie Ihr eigenes .NET-Synchronisationsskript
  1. Fügen Sie der Datenbank die Tabelle user_pwd_table hinzu. Führen Sie hierzu die folgende SQL-Anweisung in Interactive SQL aus:

    CREATE TABLE user_pwd_table (
      user_name  varchar(128) PRIMARY KEY NOT NULL,
      pwd        varchar(128)
    )
  2. Fügen Sie der Tabelle anschließend einen Benutzer und ein Kennwort hinzu:

    INSERT INTO user_pwd_table VALUES('user1', 'myPwd')
  3. Erstellen Sie ein Verzeichnis für Ihre .NET-Assembly. Beispiel: c:\mlexample.

  4. Erstellen Sie eine Datei mit dem Namen AuthUser.cs und folgendem Inhalt:

    Weitere Hinweise finden Sie unter authenticate_user (Verbindungsereignis).

    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;
    
            // 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.

  5. Kompilieren Sie die Datei AuthUser.cs. Sie können hierzu die Befehlszeile oder Visual Studio verwenden.

    Folgende Befehlszeile kompiliert z.B. AuthUser.cs und generiert eine Assembly namens example.dll in c:\mlexample.

    csc /out:c:\mlexample\example.dll /target:library /reference:"%SQLANY11%\Assembly\v2\iAnywhere.MobiLink.Script.dll" AuthUser.cs
  6. 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
  7. Anschließend starten Sie den MobiLink-Server 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.