Kanalfactory

Im ChannelFactory-Beispiel wird veranschaulicht, wie eine Clientanwendung einen Kanal mit der ChannelFactory-Klasse statt einem generierten Client erstellen kann. Dieses Beispiel basiert auf Erste Schritte, worin ein Dienst für einen Taschenrechner implementiert wird.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

In diesem Beispiel wird mithilfe der ChannelFactory<TChannel>-Klasse ein Kanal für einen Dienstendpunkt erstellt. Normalerweise generieren Sie zum Erstellen eines Kanals zu einem Dienstendpunkt einen Clienttyp mit dem ServiceModel Metadata Utility Tool (Svcutil.exe) und erstellen eine Instanz des generierten Typs. Sie können einen Kanal auch mithilfe der ChannelFactory<TChannel>-Klasse erstellen, wie in diesem Beispiel dargestellt. Der im folgenden Beispielcode erstellte Dienst ist der gleiche wie der in Erste Schritte.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
                    ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();

Wichtig

Wenn Sie dieses Beispiel in einem Szenario computerübergreifend ausführen, müssen Sie "localhost" im oben stehenden Code durch den vollqualifizierten Namen des Computers ersetzen, auf dem der Dienst ausgeführt wird. Im Beispiel wird die Endpunktadresse nicht in der Konfiguration festgelegt, daher muss dies im Code erfolgen.

Nach dem Erstellen des Kanals können Dienstvorgänge wie bei einem generierten Client aufgerufen werden.

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = channel.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

Zum Schließen des Kanals muss dieser zunächst in eine IClientChannel-Schnittstelle umgewandelt werden. Dies ist erforderlich, da der Kanal wie generiert in der Clientanwendung mit der ICalculator-Schnittstelle deklariert wird. Diese verfügt über Methoden wie Add und Subtract, nicht jedoch über Close. Die Close-Methode stammt aus der ICommunicationObject-Schnittstelle.

// Close the channel.
 ((IClientChannel)client).Close();

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um die Clientanwendung zu schließen.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

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

  1. Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen. Beachten Sie, dass das Veröffentlichen von Metadaten in diesem Beispiel nicht aktiviert wird. Sie müssen zuerst das Veröffentlichen von Metadaten aktivieren, damit der Clienttyp in diesem Beispiel erneut generiert wird.

  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.

So führen Sie das Beispiel computerübergreifend aus

Ersetzen Sie "localhost" im folgenden Code durch den vollqualifizierten Namen des Computers, auf dem der Dienst ausgeführt wird.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");