Поделиться через


Адресация

В примере "Адресация" показаны различные аспекты и функции адресов конечных точек. Пример основан на руководстве по началу работы. В этом примере сервис размещён самостоятельно. Служба и клиент являются консольными приложениями. Служба определяет несколько конечных точек с помощью сочетания относительных и абсолютных адресов конечных точек.

Замечание

Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.

Файл конфигурации службы указывает базовый адрес и четыре конечные точки. Базовый адрес указывается с помощью элемента добавления в разделе service/host/baseAddresses, как показано в следующем примере конфигурации.

<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.

При запуске клиента запросы и ответы операции отображаются как в окнах службы, так и в консоли клиента. Нажмите клавишу ВВОД в каждом окне консоли, чтобы завершить работу службы и клиента.

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. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  2. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  3. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.

    Замечание

    Если вы используете Svcutil.exe для повторного создания конфигурации для этого примера, обязательно измените имя конечной точки в конфигурации клиента, чтобы соответствовать коду клиента.