Неверное исключение операции - PullRequest
11 голосов
/ 02 ноября 2009

Я создал WCF Serice, который отлично работал при размещении на IIS.

Теперь я взял тот же сервис и создал хост-приложение в WPF, и при попытке запустить сервис из этого приложения я получаю следующее исключение:

The HttpGetEnabled property of ServiceMetadataBehavior is set to true and the   
HttpGetUrl property is a relative address, but there is no http base address.  
Either     supply an http base address or set HttpGetUrl to an absolute address.

Ответы [ 3 ]

22 голосов
/ 02 ноября 2009

Ошибка совершенно очевидна - вы используете HTTP, вы включили HttpGetEnabled в поведении ServiceMetadata, но не указали базовый адрес в вашей конфигурации.

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

Измените ваш конфиг, чтобы он выглядел примерно так:

<system.serviceModel>
  <services>
    <service name="YourService">
      <host>
        <baseAddresses>
           <add baseAddress="http://localhost:8080/YourService" />
        </baseAddresses>
      </host>
      <endpoint address="mex" binding="mexHttpBinding"
                contract="IMetadataExchange" />
      ..... (your own other endpoints) ...........
    </service>
  </services>
</system.serviceModel>

Теперь у "HttpGetEnabled" есть базовый адрес http://localhost.8080/YourService, по которому можно получить метаданные.

Или, если вам не нравится это, опять же, сообщение об ошибке совершенно ясно в вашей альтернативе: задайте абсолютный URL-адрес для HttpGetUrl в ваших ServiceMetadata:

  <serviceBehaviors>
    <behavior name="Default">
      <serviceMetadata 
           httpGetEnabled="true" 
           httpGetUrl="http://localhost:8282/YourService/mex" />
    </behavior>
  </serviceBehaviors>

Клиенты могут получить ваши метаданные от ваших конечных точек "mex", либо по фиксированному URL, определенному, как в этом втором примере, либо они перейдут на базовый адрес службы для метаданных (если они есть). 1014 *

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

Марк

0 голосов
/ 16 августа 2016

Проверьте правильность класса обслуживания.

Это решило мою проблему

// Create a ServiceHost for the CalculatorService type and 
// provide the base address.
serviceHost = new ServiceHost(typeof(ServiceClass));
0 голосов
/ 08 апреля 2015

Я столкнулся с этой ошибкой, когда попытался использовать привязку net.pipe. В моем случае поведение службы по умолчанию опубликовало метаданные службы. Это является причиной моей ошибки. Мое решение - использовать другое поведение для ваших услуг. Затем я изменил свой конфигурационный файл в соответствии с ответом @marc_s и изменил поведение службы следующим образом:

<serviceBehaviors>
        <!--Default behavior for all services (in my case net pipe binding)-->
        <behavior >

          <serviceMetadata   httpGetEnabled="false" httpsGetEnabled="false" />

          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <!--for my http services -->
        <behavior name="MyOtherServiceBehavior">

          <serviceMetadata   httpGetEnabled="true" httpsGetEnabled="true" />

          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...