Udostępnij przez


Fabryka kanałów

Przykład ChannelFactory pokazuje, jak aplikacja kliencka może utworzyć kanał z ChannelFactory klasą zamiast wygenerowanego klienta. Ten przykład jest oparty na Rozpoczęcie, które implementuje usługę kalkulatora.

Uwaga / Notatka

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

W tym przykładzie ChannelFactory<TChannel> użyto klasy do utworzenia kanału do punktu końcowego usługi. Zazwyczaj aby utworzyć kanał do punktu końcowego usługi, należy wygenerować typ klienta za pomocą narzędzia ServiceModel Metadata Tool (Svcutil.exe) i utworzyć wystąpienie wygenerowanego typu. Kanał można również utworzyć przy użyciu ChannelFactory<TChannel> klasy , jak pokazano w tym przykładzie. Usługa utworzona za pomocą poniższego przykładowego kodu jest identyczna z usługą w artykule Wprowadzenie.

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();

Ważne

Jeśli używasz tego przykładu w scenariuszu między maszynami, musisz zastąpić ciąg "localhost" w poprzednim kodzie w pełni kwalifikowaną nazwą maszyny, na której jest uruchomiona usługa. Ten przykład nie używa konfiguracji do ustawiania adresu punktu końcowego, dlatego należy to zrobić w kodzie.

Po utworzeniu kanału operacje usługi można wywołać tak samo jak w przypadku wygenerowanego klienta.

// 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);

Aby zamknąć kanał, należy najpierw rzutować go do interfejsu IClientChannel . Jest to spowodowane tym, że kanał wygenerowany jest zadeklarowany w aplikacji klienckiej przy użyciu interfejsu ICalculator , który ma metody takie jak Add i Subtract , ale nie Close. Metoda Close pochodzi z interfejsu ICommunicationObject .

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

Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij ENTER w oknie klienta, aby zamknąć aplikację klienczą.

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.

Aby skonfigurować, skompilować i uruchomić przykładowy program

  1. Upewnij się, że wykonano procedurę instalacji One-Time dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w Kompilowanie przykładów Windows Communication Foundation. Pamiętaj, że ten przykład nie umożliwia publikowania metadanych. Aby ponownie wygenerować typ klienta, należy najpierw włączyć publikowanie metadanych dla tego przykładu.

  3. Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w Uruchamianie przykładów programu Windows Communication Foundation.

Aby uruchomić próbkę na różnych maszynach

Zastąp ciąg "localhost" w poniższym kodzie w pełni kwalifikowaną nazwą maszyny, na którym jest uruchomiona usługa.

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