2011-07-13 37 views
16

Web APIサービス用のいくつかのルートをホストするMVCソリューションがあります。状況によっては、簡単なHTTP getを使ってJavaScriptから呼び出すことにします。他のものでは、おそらく別のMVCアプリケーションである.NETコードから呼び出す必要があります。ASP.NET Web APIサービスへのサービス参照の追加

これらのWeb APIエンドポイントにサービス参照を追加し、典型的なWCFサービスと同様にツールでプロキシクライアントとCLRタイプを作成する方法はありますか?私はここにSOAPが含まれていないことを知っていますが、それは可能であることを読んだだけで、方法はありません。

答えて

15

いいえ、RESTサービスはありません。 RESTサービスは、サービス参照によってプロキシを作成するためのメタデータを公開しません(特別な形式のメタデータを持つWCFデータサービスを除く)。 Web-APIのHttpClientクラスを使用してサービスを呼び出します。

+0

お返事ありがとうございます。そのため、メタデータスキーマは公開されていませんが、xsdがXMLに対して行うように、その応答から派生するものと思われます。サービス参照を追加するには、何らかのスキーマを派生させ、これに基づいてclrクラスを構築する必要があり、クライアントは基本的にこれをコレクションに逆シリアル化します。これは設計時にこのタイプのサービスを使用する柔軟性を与えるためにツールが実際にサポートするかもしれない何かですか? –

+0

これはかなり不自由な言い訳です。ここでの(典型的な)シナリオは、あなた自身のサービスを呼び出すことです。あなたはいつも自分のサービスのメタデータを持っています。これは単に下位のツーリングの問題です。 ODataが必要な場合は、問題が悪化します。次に、古いWCFサービスの表現力を得るために、独自のlinqプロバイダを作成する必要があります。優れたツーリングがそれを変える可能性があります。 – John

+0

@ジョン:MSが運営する多くのUserVoiceサイトがあります。 RESTサービスのWADLまたはWSDL2記述のサポートを追加するには、要求がまだ存在しない場合はそれを上げてください。説明が利用できるようになると、クライアントの世代を持つこともできます。 –

1

私が見た数少ないサンプルから直接ではなく、Web Apiを使用するとServiceContractを設定する必要があります。 2番目のサービスコントラクトインターフェイスを通常のOperationContract & DataContract属性と必要に応じて追加すると、選択した標準WCFバインディングと一致するMEXエンドポイントを持つエンドポイントを作成できます。このサービスは両方のインターフェイスを実装するため、Add Service Referenceは標準のWCFエンドポイントからWSDLドキュメントを取得できます。

+0

直列化(インピーダンスを避けるためには両方の場合で同じである必要があります)、重複したメソッド属性(フレームワーク間で互換性がない)、認証と承認など、いくつかの詳細があります。私はそれが利点の価値がない面倒だと思うだろうが、それにもかかわらず興味深い考えだ。 – John

8

これを行うための標準的な仕組みはありません。 RESTは、クライアントのすべてがサーバーとは独立して進化するシステムを構築することに関するものです。 HTTPは、GET、PUT、POST、DELETEなどの統一されたインタフェースを定義しているため、メソッド記述の必要はありません。どちらの理由でも、REST WSDLに相当するものはありません。あるいは、RESTコミュニティ間で実際に勢いを得ている同等のものはないと言います(つまり、WADLがあります)。

RESTサービスにおけるカップリングのポイントは、実際にはメディアタイプ/ボディフォーマットの周りです。そのために、我々は強く型付けされたメカニズムをサポートしています。 Web APIでは、HttpClient(HttpClient on Nuget)を提供しています。このHttpClientを使用すると、CLRタイプを取得して、何らかの表現に変換することができます。そのままの状態で、XMLとJSONをサポートします。

したがって、CLRタイプを作成してクライアントと共有し、クライアントでHttpClientを使用できます。

タイプ自体を作成するには、いくつかのオプションもあります。

  1. 「貼り付けXMLとして」ツールを使用して/ペーストをコピーするためにWeb APIをの自動ヘルプページ機能を使う手
  2. ことによってそれを作成します。
関連する問題