WebHttpBinding не достигает клиента - PullRequest
4 голосов
/ 19 января 2011

Я создал веб-сервис, для которого я пытаюсь предоставить 3 конечные точки с разными привязками.1. basicHttpBinding, 2. wsHttpBinding, 3. webHttpBinding

Когда я делаю ссылку на службу, я получаю только конечные точки с созданными привязками basicHttpBinding и wsHttpBinding.Я не получаю webHttpBinding.Что может ошибаться.

Вот структура узла serviceModel в web.config.

  <system.serviceModel>
<diagnostics>
  <messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"/>
</diagnostics>
<services>
  <service behaviorConfiguration="VersionTolerance.Service1Behavior" name="BookShop.BookShopService">
    <endpoint address="sadha" binding="basicHttpBinding" contract="BookShop.IBookShopService" />
    <endpoint address="ws" binding="wsHttpBinding" contract="BookShop.IBookShopService" >
    </endpoint>
    <endpoint address="web" binding="webHttpBinding" behaviorConfiguration="webHttpBehavior"
      contract="BookShop.IBookShopService" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:49654/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="VersionTolerance.Service1Behavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>          
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="webHttpBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

1 Ответ

10 голосов
/ 19 января 2011

В этом нет ничего плохого - просто так работает!

basicHttpBinding и wsHttpBinding - это привязки SOAP, которые предоставляют метаданные об их обслуживании - ваша Visual Studio Add Service Reference может запрашивать их конечные точки, узнавать, как они называются, какие методы они предлагают, какие типы данных они ожидают как параметры и что они возвращают.

webHttpBinding - это REST - и REST по умолчанию не имеет понятия метаданных - вы не получите описание службы, список методов и т. Д. - REST - это все о ресурсах - нет методы.

Поэтому, когда вы делаете Add Service Reference, вы получаете прокси-клиенты для конечных точек SOAP - но не для конечной точки REST / webHttpBinding. Работает как задумано.

Службы данных WCF, построенные на основе REST, предлагают аналогичную привязку к SOAP, поскольку вы можете сделать Add Service Reference и получить хороший прокси-сервер на стороне клиента и все - и это делается после протокола OData определяет обмен метаданными поверх REST. Так что если вы сможете превратить свою службу REST в службу данных WCF, у вас все будет в порядке.

В противном случае для REST вам просто нужно «узнать» (со страницы документации или чего-то еще), что такое URI ресурса для вашей службы REST и что делают глаголы HTTP в контексте REST.

...