Udostępnij za pośrednictwem


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 wprowadzenie , który implementuje usługę kalkulatora.

Uwaga

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 klawisz 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ład

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej 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 temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu 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 temacie Uruchamianie przykładów programu Windows Communication Foundation.

Aby uruchomić przykładową maszynę krzyżową

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