Почему моя служба WCF не отвечает на мои настройки baseAddress в web.config? - PullRequest
2 голосов
/ 12 февраля 2009

Я пытаюсь научиться создавать сервисы RESTful с WCF, воссоздавая проект на этой записи в блоге Энтони Стила. Он использует следующий XML в своей конфигурации для настройки конечной точки для службы.

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/greeter"/>
      </baseAddresses>
    </host>

Однако, когда я пытаюсь сделать то же самое в web.config моего веб-сайта ASP.NET 3.5, я не могу перейти к своему сервису. Вот XML, который я использую:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="GreeterBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="GreeterBehavior" name="Greeter">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:49268/TestREST/webapi/services/greeter"/>
        </baseAddresses>
      </host>
      <endpoint address="" binding="wsHttpBinding" contract="IGreeter">
        <identity>
          <dns value="localhost"/>
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

Я бы предположил, что моя конфигурация позволит мне перейти к http://localhost:49268/TestREST/webapi/services/greeter и посмотреть мой сервис. Все, что я получаю, это сообщение о ресурсе не найден - я что-то упустил?

Редактировать: Часть моей проблемы заключалась в том, что моя привязка была wsHttpBinding. Использование webHttpBinding позволило мне правильно использовать службу - за исключением того, что раздел конфигурации baseAddress по-прежнему не действует.

1 Ответ

4 голосов
/ 12 февраля 2009

Я предполагаю, что конечная точка службы не создается успешно.

В атрибуте «имя» службы вы не включаете FQN (полное имя) типа службы. Во-вторых, в атрибуте «контракт» конечной точки вы также не включаете FQN в тип контракта.

С другой стороны, это МОЖЕТ быть проблемой порта. Чтобы быть уверенным, попробуйте запустить WcfTestClient.exe, который включен в дистрибутив Visual Studio 2008. Если вы можете подключиться к http://localhost:49268/TestREST/webapi/services/greeter/mex,, то вы знаете, что это не проблема порта.

Предположим, что вы можете подключиться через MEX, а затем попробуйте применить некоторые из методов, которые предположительно будут отображены на http://localhost:49268/TestREST/webapi/services/greeter.

Если вы работаете на сервере, посмотрите некоторые ценные сведения о HttpCfg.exe здесь: WCF ServiceHost basicHttpBinding 503 ошибка

Если вам нужна дополнительная информация о WcfTestClient, поищите их здесь: Можно ли заставить WcfTestClient работать на пользовательских транспортных каналах?

Just In Case: скопируйте образец примера и убедитесь, что он работает, как определено, включая файл конфигурации, прежде чем сделать малейшее отклонение от него.

...