Freigeben über


Benutzerdefinierter Bindungstransport und -Codierung

Im Transportbeispiel wird veranschaulicht, wie eine benutzerdefinierte Bindung mit verschiedenen Transport- und Nachrichtencodierungselementen konfiguriert wird. Eine benutzerdefinierte Bindung wird durch eine sortierte Liste von einzelnen Bindungselementen definiert.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Dieses Beispiel basiert auf dem Self-Host und wurde geändert, um drei Endpunkte für die Unterstützung von HTTP-, TCP- und NamedPipe-Transporten mit benutzerdefinierten Bindungen zu konfigurieren. Die Clientkonfiguration wurde ähnlich geändert, und der Clientcode wurde geändert, um mit jedem der drei Endpunkte zu kommunizieren.

Das Beispiel veranschaulicht das Konfigurieren einer benutzerdefinierten Bindung, die eine bestimmte Transport- und Nachrichtencodierung unterstützt. Dies wird durch Konfigurieren eines Transports und einer Nachrichtencodierung für das binding Element erreicht. Die Sortierung von Bindungselementen ist wichtig beim Definieren einer benutzerdefinierten Bindung, da jede eine Ebene im Kanalstapel darstellt (siehe benutzerdefinierte Bindungen). In diesem Beispiel werden drei benutzerdefinierte Bindungen konfiguriert: ein HTTP-Transport mit Textcodierung, ein TCP-Transport mit Textcodierung und ein NamedPipe-Transport mit binärer Codierung.

Die Dienstkonfiguration definiert die benutzerdefinierten Bindungen wie folgt:

<bindings>
    <customBinding>
        <binding name="HttpBinding" >
            <textMessageEncoding
                messageVersion="Soap12Addressing10"/>
            <httpTransport />
        </binding>
        <binding name="TcpBinding" >
            <textMessageEncoding />
            <tcpTransport />
        </binding>
        <binding name="NamedPipeBinding" >
            <binaryMessageEncoding />
            <namedPipeTransport />
        </binding>
    </customBinding>
</bindings>

Wenn Sie das Beispiel ausführen, werden die Vorgangsanforderungen und -antworten sowohl im Dienst- als auch im Clientkonsolenfenster angezeigt. Der Client kommuniziert mit jedem der drei Endpunkte, indem er zuerst auf HTTP, dann auf TCP und schließlich auf NamedPipe zugreift. Drücken Sie die EINGABETASTE in den einzelnen Konsolenfenstern, um den Dienst und den Client zu schließen.

Die namedPipeTransport Bindung unterstützt keine Computer-zu-Computer-Vorgänge. Es wird nur für die Kommunikation auf demselben Computer verwendet. Wenn das Beispiel computerübergreifend ausgeführt werden soll, kommentieren Sie die folgenden Zeilen in der Clientcodedatei aus:

CalculatorClient client = new CalculatorClient("default");
Console.WriteLine("Communicate with named pipe endpoint.");
// Call operations.
DoCalculations(client);
//Closing the client gracefully closes the connection and cleans up resources
client.Close();
Dim client As New CalculatorClient("default")
Console.WriteLine("Communicate with named pipe endpoint.")
' call operations
DoCalculations(client)
'Closing the client gracefully closes the connection and cleans up resources
client.Close()

Hinweis

Wenn Sie Svcutil.exe verwenden, um die Konfiguration für dieses Beispiel neu zu generieren, müssen Sie den Endpunktnamen in der Clientkonfiguration so ändern, dass er mit dem Clientcode übereinstimmt.

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Um die C#-, C++- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen im Erstellen der Windows Communication Foundation-Beispiele.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.