クライアントとして ODataLib と WCF Data Services (ODataLib に依存) のどちらを選択するかは、多くの場合、制御の必要性に帰着します。ユース ケースが単純で、最も一般的な機能が必要な場合は、おそらく WCF DS が適しています。高度な機能が必要な場合や、ペイロードの読み取り方法を正確に制御する必要がある場合は、ODataLib の方が適している可能性があります。とはいえ、Vitek は、ODataLib を使用してサービス操作を読み取る方法を概念的に説明しています。
WCF DS は、バージョン 5.1 で JSON Light の読み取りをより簡単にします。これについては今週中にブログに書きますが、参照したサンプルは、この RC で実行する必要があるものです。私がまとめたサンプルには、新しい呼び出しが 1 つだけありますcontext.Format.UseJson(Func<Uri,ModelResolverResult>)
。まず、この呼び出しが必要な理由について話しましょう。OData (少なくとも Microsoft の世界では) は、強い型付けでうまく機能します。$metadata
は、使用するデータ モデルを説明する OData の良い例です。Atom ペイロードまたは JSON Verbose ペイロードを使用すると、そのタイプ情報の多くがペイロードで運ばれました。JSON Light の目標は、「トランスポート」ペイロードからそのメタデータを可能な限り取り除くことでした。
メタデータが帯域内で使用できない場合は、帯域外で使用できるようにする必要があります。これは、 への呼び出しの署名の背後にある基本的な要件ですUseJson
。基本的に、WCF DS がメタデータを必要とするときはいつでも、指定された URI のモデルを検索します。そのモデルが見つからない場合、最終的にメタデータを完全にダイヤルアップします。ペイロードが肥大化するため、これを回避したいと考えています。モデルを事前に解決する方法を WCF DS に指示することで、それを回避できます。これは、サンプルの大部分が行っていることです。
サンプルを論理的に見ていきます (はい、他にも多くの最適化が可能であることは知っています。サンプルは読みやすさのためにほとんど最適化されています)。
- モデルが過去に解決されていない場合
XmlReader
への呼び出しのために新しいを構築しますEdmxReader.TryParse
- out パラメーターの値をいくつか挙げてください
EdmxReader.TryParse
- 呼び出す
EdmxReader.TryParse
- 呼び出しが成功した場合、解析されたモデルをローカル ディクショナリにキャッシュします (現在、解析はコストのかかる操作です)。
- 呼び出しが失敗した場合は、エラーをまとめてスローします
- キャッシュされたモデルから正しいモデルを取得し、
ModelResolverResult
ラッパーで返します
うまくいけば、それは理にかなっています。そうでない場合は、ブログの投稿をより明確にするために、その理由をお聞かせください. そして、これらのビットを本番環境にリリースするまでに、これははるかに簡単になることを忘れないでください.