2011-01-19 2 views
4

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

Когда я делаю ссылку на службу, я получаю только конечные точки с 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> 

ответ

10

Там нет ничего плохого - это только так, как это работает!

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

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

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

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

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

+0

Спасибо @marc_s, я хотел бы согласиться с вашим ответом. Но я хотел бы испытать webHttpBinding, создав для этого клиента. Что касается непрофессионала, что мне делать, чтобы создать прокси-сервер для этой службы и начать использовать ее в Visual Studio? – SaravananArumugam

+1

@SaravananArumugam: как я пытался объяснить: с «нормальным» webHttpBinding вы ** не можете ** получить прокси-сервер на стороне клиента - просто нет такой вещи. Если вам нужен прокси-сервер на стороне клиента для службы на основе REST, вам необходимо создать ** службу данных WCF ** (см. Здесь: http://www.lhotka.net/weblog/CSLA4Version41Release.aspx) –

Смежные вопросы