2011-01-19 2 views
4

다른 바인딩을 가진 3 개의 끝점을 제공하려는 웹 서비스를 만들었습니다. 1은 BasicHttpBinding, 2있는 wsHttpBinding, 내가 서비스 참조를 만들 때WebHttpBinding이 클라이언트에 도달하지 않습니다.

는, 내가 만든 유일한하여은 BasicHttpBinding와 엔드 포인트와있는 wsHttpBinding 바인딩을 얻을 3으로 WebHttpBinding. 나는 webHttpBinding을 얻지 못했다. 무엇이 잘못된 것일 수 있습니다.

다음은 web.config의 serviceModel 노드 구조입니다.

<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

아무 문제가 없습니다 - 그건 작동 다만 방법!

basicHttpBindingwsHttpBinding 자신의 서비스에 대한 메타 데이터를 노출 SOAP 바인딩이다 -, 자신의 엔드 포인트를 심문 그들이이라고하는지 알 수있는 비주얼 스튜디오 Add Service Reference, 그들이 제공하는 어떤 방법, 그들은 매개 변수로 기대하고 무엇 반환 할 데이터 유형 . 기본적와 REST 메타 데이터의 개념이없는 - -

webHttpBinding는 REST는 당신이 서비스 설명 등 방법의 목록을받지 않습니다 -하지 방법 - 나머지 모두에 대한 자원입니다. 당신이 Add Service Reference을 수행 할 때

그래서 따라서, 당신은 SOAP 엔드 포인트 프록시 클라이언트를 얻을 -하지만 REST/webHttpBinding 엔드 포인트 하지. 설계된대로 작동합니다.

WCF 데이터 서비스 (REST를 기반으로 작성 됨)는 Add Service Reference을 수행하고 멋진 클라이언트 측 프록시와 모든 것을 얻을 수 있다는 점에서 SOAP 바인딩과 비슷한 경험을 제공합니다. 이는 OData 프로토콜이 정의한 이후로 수행됩니다 REST 위에 메타 데이터 교환. 따라서 REST 서비스를 WCF 데이터 서비스로 전환 할 수 있다면 다시 좋을 것입니다.

그렇지 않으면 REST를 사용하면 REST 서비스에 대한 리소스 URI가 무엇인지, 설명서의 REST 서비스에 대한 리소스 URI가 무엇인지, 그리고 REST 컨텍스트에서 HTTP 동사가하는 것을 "알 필요가있다.

+0

감사합니다. @marc_s, 귀하의 답변에 동의하고 싶습니다. 하지만 그것에 클라이언트를 생성하여 webHttpBinding을 경험하고 싶습니다. 평신도 용어로,이 서비스에 대한 프록시를 만들고 Visual Studio에서이 서비스를 사용하려면 어떻게해야합니까? – SaravananArumugam

+1

@SaravananArumugam : "정상적인"webHttpBinding을 사용하면 ** 클라이언트 측 프록시를 얻을 수 없습니다 ** - 그런 것은 없습니다. REST 기반 서비스에 대한 클라이언트 측 프록시를 원할 경우 ** WCF 데이터 서비스 ** (여기를 참조하십시오 : http://www.lhotka.net/weblog/CSLA4Version41Release.aspx)를 만들어야합니다. –

관련 문제