Adresowanie
Przykład adresowania przedstawia różne aspekty i funkcje adresów punktów końcowych. Przykład jest oparty na rozpoczynaniu pracy. W tym przykładzie usługa jest hostowana samodzielnie. Zarówno usługa, jak i klient to aplikacje konsolowe. Usługa definiuje wiele punktów końcowych przy użyciu kombinacji względnych i bezwzględnych adresów punktów końcowych.
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Plik konfiguracji usługi określa adres podstawowy i cztery punkty końcowe. Adres podstawowy jest określany przy użyciu elementu add w obszarze service/host/baseAddresses, jak pokazano w poniższej przykładowej konfiguracji.
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/ServiceModelSamples/service" />
</baseAddresses>
</host>
</service>
Pierwsza definicja punktu końcowego pokazana w poniższej przykładowej konfiguracji określa adres względny, co oznacza, że adres punktu końcowego jest kombinacją adresu podstawowego i adresu względnego zgodnie z regułami kompozycji identyfikatora URI.
<!-- Empty relative address specified:
use the base address provided by the host. -->
<!-- The endpoint address is
http://localhost:8000/ServiceModelSamples/service. -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
W takim przypadku adres względny jest pusty (""), więc adres punktu końcowego jest taki sam jak adres podstawowy. Rzeczywisty adres punktu końcowego to http://localhost:8000/servicemodelsamples/service
.
Druga definicja punktu końcowego określa również adres względny, jak pokazano w poniższej przykładowej konfiguracji.
<!-- The relative address specified: use the base address -->
<!-- provided by the host + path. The endpoint address is -->
<!-- http://localhost:8000/servicemodelsamples/service/test. -->
<endpoint address="/test"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
Względny adres "test" jest dołączany do adresu podstawowego. Rzeczywisty adres punktu końcowego to http://localhost:8000/servicemodelsamples/service/test
.
Trzecia definicja punktu końcowego określa adres bezwzględny, jak pokazano w poniższej przykładowej konfiguracji.
<endpoint address="http://localhost:8001/hello/servicemodelsamples"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
Adres podstawowy nie odgrywa żadnej roli w adresie. Rzeczywisty adres punktu końcowego to http://localhost:8001/hello/servicemodelsamples
.
Czwarty adres punktu końcowego określa adres bezwzględny i inny transport — TCP. Adres podstawowy nie odgrywa żadnej roli w adresie. Rzeczywisty adres punktu końcowego to net.tcp://localhost:9000/servicemodelsamples/service
.
<!-- The absolute address specified, different transport: -->
<!-- use the specified address, and ignore the base address. -->
<!-- The endpoint address is -->
<!-- net.tcp://localhost:9000/servicemodelsamples/service. -->
<endpoint address=
"net.tcp://localhost:9000/servicemodelsamples/service"
binding="netTcpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
Klient uzyskuje dostęp tylko do jednego z czterech punktów końcowych usługi, ale wszystkie cztery są zdefiniowane w pliku konfiguracji. Klient wybiera punkt końcowy podczas tworzenia CalculatorProxy
obiektu. Zmieniając nazwę konfiguracji z CalculatorEndpoint1
za pomocą CalculatorEndpoint4
metody , można wykonać każde z punktów końcowych.
Po uruchomieniu przykładu usługa wylicza adres, nazwę powiązania i nazwę kontraktu dla każdego z jego punktów końcowych. Punkt końcowy wymiany metadanych (MEX) to po prostu kolejny punkt końcowy z perspektywy obiektu ServiceHost, który jest wyświetlany na liście.
Service endpoints:
Endpoint - address: http://localhost:8000/ServiceModelSamples/service
binding: WSHttpBinding
contract: ICalculator
Endpoint - address: http://localhost:8000/ServiceModelSamples/service/test
binding: WSHttpBinding
contract: ICalculator
Endpoint - address: http://localhost:8001/hello/servicemodelsamples
binding: WSHttpBinding
contract: ICalculator
Endpoint - address: net.tcp://localhost:9000/servicemodelsamples/service
binding: NetTcpBinding
contract: ICalculator
Endpoint - address: http://localhost:8000/ServiceModelSamples/service/mex
binding: MetadataExchangeHttpBinding
contract: IMetadataExchange
The service is ready.
Press <ENTER> to terminate service.
Po uruchomieniu klienta żądania operacji i odpowiedzi są wyświetlane zarówno w oknach usługi, jak i konsoli klienta. Naciśnij klawisz ENTER w każdym oknie konsoli, aby zamknąć usługę i klienta.
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
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
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).
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.
Uwaga
Jeśli używasz Svcutil.exe do ponownego wygenerowania konfiguracji dla tego przykładu, pamiętaj o zmodyfikowaniu nazwy punktu końcowego w konfiguracji klienta, aby był zgodny z kodem klienta.