2011-01-19 9 views
4

異なるバインディングを持つ3つのエンドポイントを提供しようとしているWebサービスを作成しました。私はサービス参照を行うと 1. basicHttpBinding、 2. wsHttpBinding、 3. webHttpBindingWebHttpBindingがクライアントに届かない

は、私が作成したのみbasicHttpBindingとエンドポイントとwsHttpBindingバインディングを取得します。私は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バインディングです - 、そのエンドポイントを調べる彼らが呼ばているものを見つけることができ、あなたのVisual Studio Add Service Reference、彼らが提供するものの方法、それらをパラメータとして期待し、彼らが何を返すどのようなデータの種類。

webHttpBindingはRESTである - デフォルトではとRESTメタデータの概念がありません - あなたは、サービスの説明を取得することはありません、などのメソッドのリストを - ない方法 - RESTは、すべてについてリソースです。 REST/webHttpBindingエンドポイントのためではなく、ない - あなたがAdd Service Referenceを行う際

はそのため、あなたはSOAPエンドポイントのプロキシクライアントを取得します。設計どおりに動作します。 RESTの上に構築 - -

WCF Data ServicesのようにあなたがAdd Service Referenceを行うと素敵なクライアント側プロキシとすべてを取得することができ、SOAPバインディングに似たような経験を提供します - そしてこれはのODataプロトコルの定義以降に実行されますRESTの上にあるメタデータ交換。したがって、RESTサービスをWCFデータサービスに変えることができれば、もう一度うまくいくでしょう。

それ以外の場合は、RESTを使用して、RESTサービスのリソースURIが何であるか、およびRESTコンテキストでHTTP動詞が何を行うかを「知る」必要があります(ドキュメントページなどから)。

+0

ありがとう@marc_s、私はあなたの答えに同意したいと思います。しかし、私はそれにクライアントを作成してwebHttpBindingを体験したいと思います。 素人の言葉では、このサービスへのプロキシを作成してVisual Studioで使用するにはどうしたらよいですか? – SaravananArumugam

+1

@SaravananArumugam:私が説明しようとしたように、「通常の」webHttpBindingでは**クライアント側のプロキシを取得できません - そのようなものはありません。 RESTベースのサービス用のクライアントサイドプロキシが必要な場合は、** WCF Data Service **(ここをクリックしてください:http://www.lhotka.net/weblog/CSLA4Version41Release.aspx)を作成する必要があります。 –

関連する問題