Adressering
Het adresseringsvoorbeeld demonstreert verschillende aspecten en functies van eindpuntadressen. Het voorbeeld is gebaseerd op aan de slag. In dit voorbeeld wordt de service zelf-hostend. Zowel de service als de client zijn consoletoepassingen. De service definieert meerdere eindpunten met behulp van een combinatie van relatieve en absolute eindpuntadressen.
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
Het serviceconfiguratiebestand geeft een basisadres en vier eindpunten op. Het basisadres wordt opgegeven met behulp van het add-element, onder service/host/baseAddresses, zoals wordt gedemonstreerd in de volgende voorbeeldconfiguratie.
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/ServiceModelSamples/service" />
</baseAddresses>
</host>
</service>
De eerste eindpuntdefinitie die in de volgende voorbeeldconfiguratie wordt weergegeven, geeft een relatief adres op, wat betekent dat het eindpuntadres een combinatie is van het basisadres en het relatieve adres volgens de regels van de URI-samenstelling.
<!-- 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" />
In dit geval is het relatieve adres leeg (""), dus het eindpuntadres is hetzelfde als het basisadres. Het werkelijke eindpuntadres is http://localhost:8000/servicemodelsamples/service
.
De tweede eindpuntdefinitie geeft ook een relatief adres op, zoals wordt weergegeven in de volgende voorbeeldconfiguratie.
<!-- 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" />
Het relatieve adres, test, wordt toegevoegd aan het basisadres. Het werkelijke eindpuntadres is http://localhost:8000/servicemodelsamples/service/test
.
De definitie van het derde eindpunt geeft een absoluut adres op, zoals wordt weergegeven in de volgende voorbeeldconfiguratie.
<endpoint address="http://localhost:8001/hello/servicemodelsamples"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
Het basisadres speelt geen rol in het adres. Het werkelijke eindpuntadres is http://localhost:8001/hello/servicemodelsamples
.
Het vierde eindpuntadres geeft een absoluut adres en een ander transport aan: TCP. Het basisadres speelt geen rol in het adres. Het werkelijke eindpuntadres is 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" />
De client heeft toegang tot slechts één van de vier service-eindpunten, maar alle vier worden gedefinieerd in het configuratiebestand. De client selecteert een eindpunt wanneer het CalculatorProxy
object wordt gemaakt. Door de configuratienaam CalculatorEndpoint1
CalculatorEndpoint4
te wijzigen, kunt u elk van de eindpunten gebruiken.
Wanneer u het voorbeeld uitvoert, inventariseert de service het adres, de bindingsnaam en de contractnaam voor elk van de eindpunten. Het MEX-eindpunt (Metadata Exchange) is slechts een ander eindpunt vanuit het perspectief van De ServiceHost, zodat het in de lijst wordt weergegeven.
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.
Wanneer u de client uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in zowel de service- als clientconsolevensters. Druk in elk consolevenster op Enter om de service en client af te sluiten.
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.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.
Notitie
Als u Svcutil.exe gebruikt om de configuratie voor dit voorbeeld opnieuw te genereren, moet u de naam van het eindpunt in de clientconfiguratie wijzigen zodat deze overeenkomt met de clientcode.