寻址

寻址示例演示终结点地址的各个方面和功能。 此样本基于 入门指南。 在此示例中,该服务是自托管的。 服务和客户端都是控制台应用程序。 该服务使用相对终结点和绝对终结点地址的组合定义多个终结点。

注释

本示例的设置过程和生成说明位于本主题末尾。

服务配置文件指定基址和四个终结点。 基址是使用 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 对象时选择终结点。 通过更改从 CalculatorEndpoint1CalculatorEndpoint4 中的配置名称,您可以使用每个终结点。

运行示例时,服务会枚举其每个终结点的地址、绑定名称和协定名称。 元数据交换(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.

设置、生成和运行示例

  1. 确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。

  2. 若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。

    注释

    如果使用 Svcutil.exe 重新生成此示例的配置,请确保修改客户端配置中的终结点名称以匹配客户端代码。