KanalfactoryChannel Factory

In diesem Beispiel wird veranschaulicht, wie eine Clientanwendung einen Kanal mit der ChannelFactory-Klasse und nicht mit einem generierten Client erstellen kann.This sample demonstrates how a client application can create a channel with the ChannelFactory class instead of a generated client. Dieses Beispiel basiert auf der Einstieg , implementiert einen rechnerdienst.This sample is based on the Getting Started that implements a calculator service.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

In diesem Beispiel wird mithilfe der ChannelFactory<TChannel>-Klasse ein Kanal für einen Dienstendpunkt erstellt.This sample uses the ChannelFactory<TChannel> class to create a channel to a service endpoint. Zum Erstellen eines Kanals zu einem Dienstendpunkt generieren Sie in der Regel eine Art von mit der ServiceModel Metadata Utility Tool (Svcutil.exe) und erstellen Sie eine Instanz des generierten Typs.Typically, to create a channel to a service endpoint you generate a client type with the ServiceModel Metadata Utility Tool (Svcutil.exe) and create an instance of the generated type. Sie können einen Kanal auch mithilfe der ChannelFactory<TChannel>-Klasse erstellen, wie in diesem Beispiel dargestellt.You can also create a channel by using the ChannelFactory<TChannel> class, as demonstrated in this sample. Der Dienst erstellt, indem der folgende Beispielcode ist identisch mit dem Dienst in der Einstieg.The service created by the following sample code is identical to the service in the Getting Started.

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.If you are running this sample in a cross-machine scenario, you must replace "localhost" in the preceding code with the fully-qualified name of the machine that is running the service. Im Beispiel wird die Endpunktadresse nicht in der Konfiguration festgelegt, daher muss dies im Code erfolgen.This sample does not use configuration to set the endpoint address, so this must be done in code.

Nach dem Erstellen des Kanals können Dienstvorgänge wie bei einem generierten Client aufgerufen werden.Once the channel is created, service operations can be invoked just as with a generated client.

// 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.To close the channel, it must first be cast to an IClientChannel interface. 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.This is because the channel as generated is declared in the client application using the ICalculator interface, which has methods like Add and Subtract but not Close. Die Close-Methode stammt aus der ICommunicationObject-Schnittstelle.The Close method originates on the ICommunicationObject interface.

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

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um die Clientanwendung zu schließen.Press ENTER in the client window to shut down the client application.

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ührenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  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.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples. Beachten Sie, dass das Veröffentlichen von Metadaten in diesem Beispiel nicht aktiviert wird.Note that this sample does not enable metadata publishing. Sie müssen zuerst das Veröffentlichen von Metadaten aktivieren, damit der Clienttyp in diesem Beispiel erneut generiert wird.You must first enable metadata publishing for this sample to regenerate the client type.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

So führen Sie das Beispiel computerübergreifend ausTo run the sample cross machine

  1. Ersetzen Sie "localhost" im folgenden Code durch den vollqualifizierten Namen des Computers, auf dem der Dienst ausgeführt wird.Replace "localhost" in the following code with the fully-qualified name of the machine that is running the service.

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

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\ChannelFactory

Siehe auchSee Also