寻址示例演示终结点地址的各个方面和功能。 此样本基于 入门指南。 在此示例中,该服务是自托管的。 服务和客户端都是控制台应用程序。 该服务使用相对终结点和绝对终结点地址的组合定义多个终结点。
注释
本示例的设置过程和生成说明位于本主题末尾。
服务配置文件指定基址和四个终结点。 基址是使用 service/host/baseAddresses 下的 add 元素指定的,如以下示例配置所示。
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/ServiceModelSamples/service" />
</baseAddresses>
</host>
</service>
以下示例配置中显示的第一个终结点定义指定相对地址,这意味着终结点地址是基址和相对地址的组合,遵循 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" />
在这种情况下,相对地址为空(“),因此终结点地址与基址相同。 实际终结点地址为 http://localhost:8000/servicemodelsamples/service
.
第二个终结点定义还指定相对地址,如以下示例配置所示。
<!-- 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" />
将相对地址“test”追加到基址。 实际终结点地址为 http://localhost:8000/servicemodelsamples/service/test
.
第三个终结点定义指定绝对地址,如以下示例配置所示。
<endpoint address="http://localhost:8001/hello/servicemodelsamples"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
基址在地址中没有作用。 实际终结点地址为 http://localhost:8001/hello/servicemodelsamples
.
第四个终结点地址指定绝对地址和不同的传输 - TCP。 基址在地址中没有作用。 实际终结点地址为 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" />
客户端只访问四个服务终结点之一,但所有四个终结点都在其配置文件中定义。 客户端在创建 CalculatorProxy
对象时选择终结点。 通过更改从 CalculatorEndpoint1
到 CalculatorEndpoint4
中的配置名称,您可以使用每个终结点。
运行示例时,服务会枚举其每个终结点的地址、绑定名称和协定名称。 元数据交换(MEX)终结点只是从 ServiceHost 的角度来看的另一个终结点,因此它将显示在列表中。
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.
运行客户端时,作请求和响应会显示在服务和客户端控制台窗口中。 在每个控制台窗口中按 Enter 可以关闭服务和客户端。
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.
设置、生成和运行示例
确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。
若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。
若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。
注释
如果使用 Svcutil.exe 重新生成此示例的配置,请确保修改客户端配置中的终结点名称以匹配客户端代码。