Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WCF, Web Services, Remoting Новый топик    Ответить
 WCF Restful service & host base address  [new]
WinterGraveyard
Member

Откуда:
Сообщений: 49
Наткнулся на следующую непонятную ситуацию: имеется некий WCF restful сервис. Работает он вполне нормально, нареканий к нему никаких нет. Конфиг к нему был стянут и скомпонован из различных примеров и статей по написанию таких сервисов - разумеется, до конца понять, что к чему в этом конфиге, не получилось.
Сам конфиг выглядит примерно так:
<system.serviceModel>
  <services>
    <service name="RemotePrint.RemotePrintService" behaviorConfiguration="ServiceBehavior">
      <endpoint binding="webHttpBinding" contract="RemotePrint.IRemotePrintService" behaviorConfiguration="webHttp" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="http://10.1.230.68:8080/RemotePrintService" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
      <behavior>
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="webHttp">
        <webHttp />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="0" />
</system.serviceModel>

Обращение к сервису делается посредством GET-запросов из приложения на андроиде - т.е. по предоставляемым URL от контрактов методов сервисного интерфейса. Эти запросы формируются динамически, и в них напрямую подставляется IP-адрес хоста сервиса.
Недавно понадобилось внести в сервис некоторые изменения. Поскольку вся логика и контракты сервиса живут в отдельной сборке, я просто захостил сервис в консольном приложении, там же и отлаживал - опять-таки, всё работает прекрасно. Но: я вдруг обратил внимание, что IP-адрес в базовом адресе хоста (host/baseAddress/add/@baseAddress) совсем не совпадает с IP-адресом компьютера, на котором физически работает (разрабатывается и отлаживается) сервис. Заглянул в конфиг на сервере, где расположена релизная версия сервиса - то же самое, IP-адрес не имеет ничего общего с реальным IP-адресом сервера. Однако всё работает. Вопрос - почему?
На рантайме базовый адрес хоста не меняется, это проверено. Думал, этот адрес в WCF restful не нужен, и убрал его - нет, нужен, без него старт сервиса валится с ошибкой

System.InvalidOperationException: Для конечной точки с
привязкой WebHttpBinding не удалось найти базовый адрес, соответствующий схеме http.
Зарегистрированные схемы базовых адресов - [].
14 фев 18, 14:07    [21190932]     Ответить | Цитировать Сообщить модератору
Все форумы / WCF, Web Services, Remoting Ответить