Dynamische adressering van de SQL-server

0000002362     -      21-09-2018

Mercator biedt een dynamische adressering van de SQL-server. Dit betekent dat de manier om de server te bereiken kan variëren, afhankelijk van de instellingen in Mercator. Dit zorgt voor een meer flexibele adressering, door het gebruiken van een eenvoudige DNS-resolutie.

Voorbeeld :

  • De gebruikers in het lokale netwerk van het bedrijf zullen de SQL-server bereiken via het lokale IP-adres.
  • De gebruikers op afstand die connecteren via VPN, zullen de sQL-server kunnen bereiken via hetzelfde lokale IP-adres.
  • Externe gebruikers op locatie die een vast IP-adres hebben, zullen de SQL-server direct aanspreken via het publiek IP-adres, zonder de VPN te passeren.

Om deze functionaliteit te gebruiken, moet men:

  • Bechikken over Mercator 8.5 of hoger
  • In een Majuro-dossier werken
  • Beschikken over een Mercator Update contract, waarvan de versie van MercatorTunnel.dll gelijk of hoger is dan 8.4.55.
  • Beschikken over een MercatorShield update contract, waarvan de versie van MercatorShield.exe gelijk of hoger is dan 2.0.7.40 en de MercatorShieldGui.exe gelijk of hoger is dan 2.0.10.40
  • MercatorShield geïnstalleerd hebben in de Cloud
  • Na de installatie, moet men een nieuw MercatorShield certificaat aanvragen.

De instellingen van deze functie bestaat uit het schrijven van een klasse die de klasse MercatorApi.DynamicSqlServerConnector overtreft in de MercatorTunnel.dll. In deze programmatie, moet u de methodeGetServer overbelasten die een string retourneert met hierin de naam of het adres van de SQL-server. Het voorbeeld hieronder illustreert deze situatie: het adres van de SQL-server is nog steeds 192.168.2.110, tenzij gebruikers zich op een externe locatie bevinden, erkend door het gebruik van het bereik van de lokale IP-adressen 192.168.32.0. In het laatste geval het adres van de SQL-server verzonden via sql.test.com.

Zoom
using System;
using System.Collections.Generic;
using MercatorApi;
using System.Text;
using System.Net.NetworkInformation;

namespace MyDynamicSqlServerConnector
{
    public class MyDynamicSqlServerConnector : DynamicSqlServerConnector
    {

        public override string GetServer(MercatorSqlConnection.DynamicSqlServerContext context)
        {
            foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (ni.OperationalStatus == OperationalStatus.Up)
                {
                    foreach (UnicastIPAddressInformation x in ni.GetIPProperties().UnicastAddresses)
                    {
                        if ((x.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        && (x.Address.ToString().StartsWith("192.168.32.")))
                                return "sql.test.com";
                    }
                }
            }
            return "192.168.2.110";
        }
    }
 

De assembly bevat deze klasse die moet geplaatst worden

  • op Mercator niveau
    • In de hoofddirectory
    • In de lokale resource directory (indien er een lokale resource directory geïnstalleerd is.)
  • Op MercatorShield niveau: in de directory die MercatorShieldGui.exe bevat

Vervolgens moet men het bestand Mercator.connection aanpassen en stel de SQL-server waarde als volgt in

Mogelijkheid 1:

  • Assemblyname (eindigt op .dll)
  • dubbele punt
  • namespace die de klasse bevat
  • dubbele punt
  • naam van de klasse

Voorbeeld:

MyDynamicSqlServerConnector.dll:MyDynamicSqlServerConnector:IneoAdeoDynamicSqlServerConnector

Mogelijkheid 2:

  • Assemblyname (eindigt op .dll)
  • dubbele punt
  • namespace die de klasse bevat
  • dubbele punt
  • naam van de klasse

Voorbeeld:

MyDynamicSqlServerConnector.dll:MyDynamicSqlServerConnector:MyDynamicSqlServerConnector?192.168.2.110

In het laatste geval zal er bij de instantiatie van de assembly of het uitvoeren van de method GetServer een exception worden opgeroepen, dus zal de SQL-server aangeven na het vraagteken dat er hiermee rekening zal gehouden worden.

 

Opmerkingen:

  • Mercator voorkomt dat een adres meerdere SQL-servers aanspreekt. Het doel hiervan is om de zelfde server met verschillende adressen te bereiken.
  • Om performantieredenen, zal de method GetServer niet uitgevoerd worden bij elke SQL-connectie, behalve bij de eerste verbinding. Vervolgens zal de geretourneerde waarde bijgehouden worden in het Cache-geheugen.