Freigeben über


Schritt 3: Implementieren der Verbindung für den Echo-Adapter

Schritt 3 von 9

Dauer: 45 Minuten

In diesem Schritt implementieren Sie die Verbindungsfunktion des Echo-Adapters. Gemäß dem WCF LOB Adapter SDK müssen Sie die folgenden abstrakten Klassen und Schnittstellen implementieren, wenn Sie eine Verbindung mit dem Zielsystem herstellen.

  • Microsoft.ServiceModel.Channels.Common.ConnectionUri

  • Microsoft.ServiceModel.Channels.Common.IConnection

  • Microsoft.ServiceModel.Channels.Common.IConnectionFactory

    Anstatt von den oben genannten abstrakten Klassen und Schnittstellen abzuleiten, generiert der Adapterentwicklungs-Assistent automatisch die drei abgeleiteten Klassen EchoAdapterConnection, EchoAdapterConnectionUri und EchoAdapterConnectionFactory. Zusätzlich zum Erstellen der Klassen verfügt jede über eine Standardmethode, die eine bestimmte Ausnahme auslöst, System.NotImplementedException. Diese Anweisung erinnert den Entwickler daran, jede Klasse zu implementieren. Wenn die -Klasse implementiert ist, muss diese Ausnahmeauslöser-Anweisung entfernt werden.

    Im folgenden Abschnitt aktualisieren Sie diese drei Klassen, um besser zu verstehen, wie eine Verbindung behandelt wird, was die URI-Struktur ist und wie Sie verschiedene URI-Elemente programmgesteuert abrufen und diese Elemente dann innerhalb des Adapters verwenden.

Voraussetzungen

Bevor Sie mit diesem Schritt beginnen, müssen Sie Schritt 2: Kategorisieren der Adapter- und Verbindungseigenschaften erfolgreich abgeschlossen haben. Außerdem sollten Sie über ein klares Verständnis der Microsoft.ServiceModel.Channels.Common.IConnectionKlassen , Microsoft.ServiceModel.Channels.Common.IConnectionFactoryund Microsoft.ServiceModel.Channels.Common.ConnectionUri verfügen.

Der Adapterentwicklungs-Assistent generiert drei abgeleitete Klassen: EchoAdapterConnection, EchoAdapterConnectionUri und EchoAdapterConnectionFactory. Im Folgenden finden Sie eine kurze Übersicht über die jeweils zugeordneten Methoden.

EchoAdapterConnection

Abhängig von der Komplexität Des Adapters müssen Sie möglicherweise alle folgenden fünf Methoden implementieren. Für echo-Adapter werden die meisten nicht unterstützt, da das Echo-Adapterbeispiel kein Zielsystem enthält.

Methode Beschreibung
public void Close(TimeSpan Timeout) Schließt die Verbindung mit dem Zielsystem. Der Echo-Adapter verwendet diese Methode, um dem Ablaufverfolgungslistener nur Ablaufverfolgungsereignisse hinzuzufügen.
public bool IsValid(TimeSpan timeout) Gibt einen Wert zurück, der angibt, ob die Verbindung noch gültig ist.

Vom Echo-Adapter nicht unterstützt.
public void Open(TimeSpan timeout) Öffnet die Verbindung mit dem Zielsystem.

N/A für den Echoadapter. Das Beispiel zeigt jedoch, wie Sie ein URI-Element namens enableAuthentication verwenden, um von Benutzern die Angabe eines Benutzernamens zu verlangen.
public void ClearContext() Löscht den Kontext der Verbindung. Diese Methode wird aufgerufen, wenn die Verbindung wieder auf den Verbindungspool festgelegt wird.

Vom Echo-Adapter nicht unterstützt.
public void Abort() Bricht die Verbindung mit dem Zielsystem ab.

Vom Echo-Adapter nicht unterstützt.

EchoAdapterConnectionFactory

Die Verbindungsfactory ist für das Erstellen der Verbindung verantwortlich. Standardmäßig müssen Sie diese Klasse nur ändern, wenn Sie eine Verbindung mit einem Zielsystem herstellen. Obwohl der Echo-Adapter kein Zielsystem umfasst, zeigt er Ihnen, wie Sie ein benutzerdefiniertes URI-Element namens enableAuthentication verwenden, wenn Ihre Verbindung eine Benutzerauthentifizierung erfordert.

Hinweis

Die enableAuthentication ist kein Schlüsselwort (keyword), es handelt sich nur um einen Variablennamen. Daher können Sie einen beliebigen Namen dafür auswählen.

EchoAdapterConnectionUri

Dies stellt eine Verbindungszeichenfolge zum Zielsystem dar.

Methode Beschreibung
public override URI URI Ruft den URI ab und legt den URI fest. Ruft ab, um die URI-Zeichenfolge zu erstellen, und legt fest, dass die URI-Zeichenfolge analysiert wird.
public EchoAdapterConnectionUri() Initialisiert eine neue instance der ConnectionUri-Klasse.
Public override string SampleUriString Gibt EchoAdapter.SCHEME + "://{hostname}/{application}?enableAuthentication={True|False}".

Diese Rückgabezeichenfolge wird als Beispiel im Tool Adapterdienstverweis-Plug-In hinzufügen angezeigt, wie in der folgenden Abbildung dargestellt.

Screenshot: Dialogfeld

Echoadapterverbindungs-URI

Der Beispiel-Verbindungs-URI des Echoadapters wird wie folgt beschrieben: EchoAapter.SCHEME://{hostname}/{application}?enableAuthentication={true|false}

Da EchoAapter.SCHEME echov2 ist, lautet der Verbindungs-URI:

echo2://lobhostname/lobapplication?enableAuthentication={true|false}

Sie können den vorherigen Verbindungs-URI bei enableAuthentication=false wie folgt lesen:

Wechseln Sie mithilfe des echov2-Transportschemas zu einem Computer namens lobhostname, auf dem eine Anwendung namens lobapplication, die keine Authentifizierung erfordert, auf Ihre Verbindung wartet.

Wenn enableAuthentication=true aktiviert ist, lesen Sie die Verbindung wie folgt:

Wechseln Sie mithilfe des echov2-Transportschemas zu einem Computer namens lobhostname, auf dem eine Anwendung mit dem Namen lobapplication erwartet, dass die Authentifizierung auf Ihre Verbindung wartet. Für den Echo-Adapter ist nur ein Benutzername erforderlich.

Mit einem definierten URI können Sie ihn programmgesteuert nutzen und für Konnektivität und Konfiguration analysieren. Wenn für die Verbindung vertrauliche Daten wie benutzername und kennwort erforderlich sind, enthalten Sie diese Informationen nicht im URI. Fügen Sie stattdessen solche Informationen im System.ServiceModel.Description.ClientCredentials -Objekt hinzu. Das codebeispiel, das Sie hinzufügen, zeigt Ihnen, wie Sie dies tun.

Im folgenden Code erstellt der Echo-Adapter den URI auf zwei Arten, um ihnen zu zeigen, wie der Adapter verschiedene URI-Elemente verwenden kann, um das Adapterfeature zu ändern.

echo2://lobhostname/lobapplication?enableAuthentication=[true|false]

echo2://lobhostname/lobapplication?enableAuthentication=[true|false]&echoInUpperCase=true

Abrufen des URI-Elements

Sie können jedes URI-Element im Echoadapter-URI echo2://lobhostname/lobapplication?enableAuthentication=false&echoInUpperCase=false analysieren. Die Werte des URI-Elements und die zugeordneten Methoden sind in der folgenden Tabelle aufgeführt:

URI-Elementwert Methode
lobhostname System.Uri.Host%2A , um den Hostnamen abzurufen
Lobanwendung System.Uri.AbsolutePath%2A , um den Namen der Zielanwendung abzurufen
enableAuthentation=false GetQueryStringValue("enableAuthentication")

Verwenden Sie dieses URI-Element zum Überprüfen von Benutzeranmeldeinformationen Hinweis: GetQueryStringValue ist eine statische Methode, die im Microsoft.ServiceModel.Channels.Common.ConnectionUri
echoInUpperValue=false GetQueryStringValue("echoInUpperValue")

Verwenden Sie dieses URI-Element, um die eingehende Zeichenfolge in Großbuchstaben zu konvertieren.

EnableAuthentication-URI-Element

Ihr Zielsystem erfordert häufig, dass Sie Clientanmeldeinformationen angeben, um eine Verbindung mit dem Zielsystem herzustellen. Wie bereits erwähnt, umfasst der Echo-Adapter kein Zielsystem. Als Beispiel wird gezeigt, wie Sie ein benutzerdefiniertes URI-Element namens enableAuthentication verwenden, um die Anmeldeinformationen bereitzustellen.

 public class EchoAdapterConnection : IConnection   
{  
….  
   public void Open(TimeSpan timeout)  
  {  
    // only validate the credentials if EnableAuthentication  
    // connection property value is true  
    if (this.ConnectionFactory.ConnectionUri.EnableAuthentication)  
    {  
        // this adapter expects a value in username  
        if (this.connectionFactory.ClientCredentials != null &&  
            string.IsNullOrEmpty(this.connectionFactory.ClientCredentials.UserName.UserName))  
        {  
            throw new CredentialsException("Username is expected.");  
        }  
  }  
}  

Der Code überprüft, ob enableAuthentication true ist und ob kein Benutzername angegeben wird. Wenn kein Benutzername angegeben wird, wird eine Ausnahme ausgelöst, die vom Tool Adapterdienstverweis-Plug-In hinzufügen abgefangen wird, wie unten gezeigt:

Screenshot: Ausnahme, die ausgelöst wird, wenn der Benutzername nicht angegeben wird

Um den Benutzernamen anzugeben, können Sie ihn im Tool Adapterdienstverweis-Plug-In hinzufügen im Dialogfeld Adapter konfigurieren eingeben, wie in der folgenden Abbildung gezeigt:

Screenshot: Dialogfeld

EchoInUpperCase-URI-Element

Auf das EchoInUpperCase-URI-Element kann wie ein boolesches Flag verwiesen werden. Wenn das Flag true ist, konvertiert der Adapter die Eingabezeichenfolge des EchoStrings-Vorgangs in Großbuchstaben.

Um den Standardwert des echoInUpperCase-URI-Elements zu ändern, verwenden Sie die Registerkarte URI-Eigenschaften des Adapters konfigurieren im Add Adapter Service Reference Plug-In( siehe unten).

Screenshot: EchoInUpperCase-URI-Element

Aktualisieren von EchoAdapterConnection

Sie implementieren die IsValid-, Open- und Close-Methode der EchoAdapterConnection-Klasse.

So aktualisieren Sie die EchoAdapterConnection-Klasse

  1. Doppelklicken Sie in Projektmappen-Explorer auf die datei EchoAdapterConnection.cs.

  2. Klicken Sie im Visual Studio-Editor mit der rechten Maustaste auf eine beliebige Stelle im Editor, zeigen Sie im Kontextmenü auf Gliederung, und klicken Sie dann auf Gliederung beenden.

  3. Suchen Sie im Visual Studio-Editor nach der IsValid-Methode . Ersetzen Sie in der IsValid-Methode die vorhandene Implementierung durch die folgende:

    return true;  
    
  4. Suchen Sie im Visual Studio-Editor nach der Open-Methode . Ersetzen Sie in der Open-Methode die vorhandene Implementierung durch die folgende Implementierung. Dies zeigt, wie Sie das URI enableAuthentication-Element verwenden, um sicherzustellen, dass der Benutzername angegeben wird:

    // only validate the credentials if EnableAuthentication  
    // connection property value is true  
    if (this.ConnectionFactory.ConnectionUri.EnableAuthentication)  
    {  
        // this adapter expects a value in username  
        // it just logs the credentials in the trace file  
        if (this.connectionFactory.ClientCredentials != null &&  
            string.IsNullOrEmpty(this.connectionFactory.ClientCredentials.UserName.UserName))  
        {  
            throw new CredentialsException("Username is expected.");  
        }  
        // got the username, log it in trace file  
        EchoAdapterUtilities.Trace.Trace(System.Diagnostics.TraceEventType.Information, "EchoAdapterConnection::Open", "Username is " + this.connectionFactory.ClientCredentials.UserName.UserName);  
    }  
    EchoAdapterUtilities.Trace.Trace(System.Diagnostics.TraceEventType.Information, "EchoAdapterConnection::Open", "Connection successfully established!");  
    
  5. Suchen Sie im Visual Studio-Editor nach der Close-Methode . Fügen Sie in der Close-Methode die folgende einzelne Anweisung hinzu:

    EchoAdapterUtilities.Trace.Trace(System.Diagnostics.TraceEventType.Information, "EchoAdapterConnection::Close", "Connection successfully closed!");  
    

Aktualisieren der EchoAdapterConnectionFactory

Sie implementieren den EchoAdapterConnectionFactory-Konstruktor und fügen zwei Eigenschaften namens ClientCredentials und ConnectionUri hinzu.

So aktualisieren Sie die EchoAdapterConnectionFactory-Klasse

  1. Doppelklicken Sie in Projektmappen-Explorer auf die datei EchoAdapterConnectionFactory.cs.

  2. Klicken Sie im Visual Studio-Editor mit der rechten Maustaste auf eine beliebige Stelle im Editor, zeigen Sie im Kontextmenü auf Gliederung, und klicken Sie dann auf Gliederung beenden.

  3. Suchen Sie im Visual Studio-Editor nach dem Bereich Private Felder . Fügen Sie die folgende einzelne Anweisung hinzu:

    private EchoAdapterConnectionUri connectionUri;  
    

    Die Liste der privaten Felder sollte mit folgendem Übereinstimmen übereinstimmen:

    // Stores the client credentials  
    private ClientCredentials clientCredentials;  
    // Stores the adapter class  
    private EchoAdapter adapter;  
    private EchoAdapterConnectionUri connectionUri;  
    
  4. Suchen Sie im Visual Studio-Editor nach der EchoAdapterConnectionFactory-Methode . Fügen Sie in der EchoAdapterConnectionFactory-Konstruktormethode vor "}" die folgende einzelne Anweisung als letzte Anweisung hinzu.

    this.connectionUri = connectionUri as EchoAdapterConnectionUri;  
    

    Die Implementierung der EchoAdapterConnectionFactory-Methode sollte mit folgendem Übereinstimmen übereinstimmen:

    /// <summary>  
    /// Initializes a new instance of the EchoAdapterConnectionFactory class  
    /// </summary>  
    public EchoAdapterConnectionFactory(ConnectionUri connectionUri  
        , ClientCredentials clientCredentials  
        , EchoAdapter adapter)  
    {  
        this.clientCredentials = clientCredentials;  
        this.adapter = adapter;  
        //added  
        this.connectionUri = connectionUri as EchoAdapterConnectionUri;  
    }  
    
  5. Suchen Sie im Visual Studio-Editor nach der Region Öffentliche Eigenschaften . Fügen Sie den folgenden Code hinzu:

    /// <summary>  
    /// Returns the client credentials  
    /// </summary>  
    public ClientCredentials ClientCredentials  
    {  
        get  
        {  
            return this.clientCredentials;  
        }  
    }  
    
    /// <summary>  
    /// Returns the Connection Uri for this adapter  
    /// </summary>  
    public EchoAdapterConnectionUri ConnectionUri  
    {  
        get  
        {  
            return this.connectionUri;  
        }  
    }  
    

Aktualisieren von EchoAdapterConnectionUri

Sie implementieren den EchoAdapterConnectionUri-Standardkonstruktor, den überladenen EchoAdapterConnectionUri(Uri uri)-Konstruktor und die public override URI-Eigenschaft.

So aktualisieren Sie die EchoAdapterConnectionUri-Klasse

  1. Doppelklicken Sie in Projektmappen-Explorer auf die datei EchoAdapterConnectionUri.cs.

  2. Klicken Sie im Visual Studio-Editor mit der rechten Maustaste auf eine beliebige Stelle im Editor, zeigen Sie im Kontextmenü auf Gliederung, und klicken Sie dann auf Gliederung beenden.

  3. Suchen Sie im Visual Studio-Editor den Bereich Konstruktoren . Fügen Sie im Standardkonstruktor EchoAdapterConnectionUri() die folgende Anweisung hinzu:

    Uri = new Uri("echov2://lobhostname/lobapplication?enableauthentication=False");  
    
  4. Fügen Sie im Visual Studio-Editor im überladenen Konstruktor EchoAdapterConnectionUri(Uri uri) die folgende Anweisung hinzu:

    Uri = uri;  
    

    Ihre Implementierung der EchoAdapterConnectionUri(Uri uri)-Methode sollte mit folgendem Übereinstimmen übereinstimmen:

    public EchoAdapterConnectionUri(Uri uri)  
        : base()  
    {  
        Uri = uri;  
    }  
    
  5. Ersetzen Sie im Visual Studio-Editor in der öffentlichen Überschreibungsmethode URI den vorhandenen durch die folgende Logik. Get erstellt den URI mit echoInUpperCase oder ohne ihn. Der Satz analysiert den URI, um Hostname, Datenbankname und Abfragewerte abzurufen.

    get  
    {  
        // Build the uri  
        if (String.IsNullOrEmpty(this.hostname)) throw new InvalidUriException("Invalid target system host name.");  
        if (String.IsNullOrEmpty(this.application)) throw new InvalidUriException("Invalid target system data source name.");  
        if (EchoInUpperCase)  
        {  
            // build the uri with echoInUpperCase= query string  
            return new Uri(EchoAdapter.SCHEME + "://" + Hostname + "/" + Application + "?" + "enableAuthentication=" + EnableAuthentication + "&" + "echoInUpperCase=" + echoInUpperCase);  
        }  
        else  
        {  
            // build the uri without echoInUpperCase= query string  
            return new Uri(EchoAdapter.SCHEME + "://" + Hostname + "/" + Application + "?" + "enableAuthentication=" + EnableAuthentication);  
        }  
    }  
    set  
    {  
        // Parse the uri  
        String[] enableAuthValue = GetQueryStringValue(value, "enableAuthentication");  
        if (enableAuthValue.Length > 0) this.enableAuthentication = Boolean.Parse(enableAuthValue[0]);  
        String[] echoInUpperValue = GetQueryStringValue(value, "echoInUpperCase");  
        if (echoInUpperValue.Length > 0) this.echoInUpperCase = Boolean.Parse(echoInUpperValue[0]);  
    
        this.hostname = value.Host;  
        String[] applicationValue = value.AbsolutePath.Split('/');  
        if (applicationValue.Length > 1) this.Application = applicationValue[1];  
    }  
    
  6. Klicken Sie in Visual Studio im Menü Datei auf Alle speichern.

  7. Klicken Sie im Menü Erstellen auf Projektmappe erstellen. Sie sollten das Projekt erfolgreich kompilieren. Falls nicht, stellen Sie sicher, dass Sie alle oben genannten Schritte ausgeführt haben.

Hinweis

Sie haben Ihre Arbeit gespeichert. Sie können Visual Studio zu diesem Zeitpunkt sicher schließen oder mit dem nächsten Schritt fortfahren, Schritt 4: Implementieren des Metadatenstöberhandlers für den Echoadapter.

Was habe ich gerade getan?

Sie haben die Verbindung für den Echo-Adapter implementiert. Sie haben die Verbindungskomponenten des WCF LOB Adapter SDK, die grundlegende Struktur des Verbindungs-URI, das programmgesteuerte Analysieren der URI-Elemente und die Verwendung des URI-Elements zum Ändern des Adapterfeatures kennengelernt.

Nächste Schritte

Sie implementieren Funktionen zum Durchsuchen, Suchen und Auflösen von Metadaten sowie den ausgehenden Nachrichtenaustausch. Schließlich erstellen Sie den Adapter und stellen sie bereit.

Weitere Informationen

Schritt 4: Implementieren des Handlers zum Durchsuchen von Metadaten für den Echo-Adapter
Tutorial 1: Entwickeln des Echo-Adapters