Подтвердить что ты не робот

Конечные точки службы WCF и базовый адрес хоста

так что я litle запутался в отношении того, для чего предназначены конечные точки службы и базовый адрес хоста. Во всех примерах, которые я прошел до сих пор, они говорят о настройке конечных точек с необходимыми связями, и вы можете обычно перемещаться к тем конечным точкам

Ховер, когда я использую следующую конфигурацию для настройки и размещения моей службы, она, по-видимому, раскрывает базовый адрес Hosts.

    <configuration>
      <system.web>
        <compilation debug="true" />
      </system.web>
      <!-- When deploying the service library project, the content of the config file must be added to the host's
      app.config file. System.Configuration does not support config files for libraries. -->
      <system.serviceModel>
        <services>
          <service name="HostService.EvalService">
            <endpoint address="http://localhost:8080/basic"
              binding="basicHttpBinding" contract="HostService.IEvalService" />
            <endpoint address="http://localhost:8080/ws"
              binding="wsHttpBinding" contract="HostService.IEvalService" />
            <endpoint address="mex" binding="mexHttpBinding"
              name="mex" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8080/EvalsService" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

Может кто-нибудь объяснить это мне?

4b9b3361

Ответ 1

Когда вы размещаете службу WCF в IIS, базовый адрес может быть только URL-адресом в файле .svc. Если вы укажете любой другой базовый адрес, он будет проигнорирован. Вы все же можете указать относительный URI для своих конечных точек, например address="basic" или address = "ws". Тогда адрес на конечной точке будет <URL to the .svc file>/basic и <URL to the .svc file>/ws в этом случае.

Ответ 2

Когда вы оставляете адрес конечной точки пустым, это означает, что конечная точка будет просто использовать соответствующий базовый адрес для своего адреса конечной точки. В качестве альтернативы вы можете настроить базовый адрес как абсолютный путь своей службы или как лучший подход, написать относительные адреса для ваших конечных точек.

Когда вы размещаете свои службы в IIS, базовый адрес службы определяется виртуальным каталогом IIS вместе с файлом .svc.

Предположим, что у вас есть файл с именем calc.svc, и вы поместите его в виртуальный каталог, соответствующий "http://localhost: 8080/calcservice". Базовый адрес для этой службы будет "http://localhost: 8080/calcservice/calc.svc".

IIS заставляет конечные точки использовать этот базовый адрес, определенный в соответствии с вашим путем развертывания службы. Если вы укажете другой базовый адрес, а затем соответствующий виртуальный каталог, вы получите исключение.

Рассмотрим приведенную ниже конфигурацию;

<configuration>
    <system.serviceModel>
        <services>
            <service name="CalculatorService">
              <!-- base address determined by IIS virtual directory -->
              <endpoint binding="basicHttpBinding" contract="ISimpleMath"/>
              <endpoint address="secure" binding="wsHttpBinding" contract="ISimpleMath"/>
              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            </service>
        ...

... адрес первой конечной точки становится таким же, как и базовый адрес ( "http://localhost: 8080/calcservice/calc.svc" ), так как я оставил адрес конечной точки пустым. Адрес второй конечной точки становится комбинацией базового адреса, добавленного с "безопасным", например: http://localhost: 8080/calcservice/calc.svc/secure. И адрес конечной точки "mex" - "http://localhost: 8080/calcservice/calc.svc/mex". Это может показаться немного странным для некоторых людей, поскольку относительная часть адреса добавляется справа от имени файла, но вы должны помнить, что calc.svc является частью базового адреса, поэтому он должен работать таким образом.

Хотя вы не можете перейти к URL-адресам "../mex" или "../secure" через браузер, они фактически активны, и клиенты могут использовать эти адреса.

Поведение клиента

Клиенты не знают о базовом адресе услуг и не нуждаются в поддержке чего-то подобного на своей стороне провода. В результате вы не найдете ничего, связанного с базовыми адресами в клиентской стороне объекта или в разделе конфигурации. Клиенты просто выбирают конкретную конечную точку, которая всегда поставляется с абсолютным адресом, а абсолютный адрес определяет адрес, который он будет использовать во время передачи.

Выше информации, главным образом извлеченной из Aaron Skonnard, отличной статьи в msdn. Я настоятельно рекомендую вам прочитать его, чтобы получить основы для адресации WCF.

Ответ 3

когда вы используете базовый адрес, вам не нужно предоставлять абсолютный URI для ваших конечных точек, например, вы можете использовать address="basic" в разделе конфигурации конечной точки, это означает, что адрес для этой конечной точки http://localhost:8080/EvalsService/basic.