1

VS2012 で ASP.Net WebAPI プレリリース ビットを使用してサーバーを作成しています (現時点では役に立たないと思いますが、VS2013 を使用できてうれしいです)。その中には、エンティティを公開する一連の OData コントローラーがあります。CodePlex で入手できる ASP.Net サンプルの ODataActionsSample のように、これらのエンティティにいくつかの OData アクションを設定しようとしています。

私の最初のクライアントは C# ベースの WPF アプリです。WCF Data Services を介したクエリは問題ありません。

私ができるようにしたいのは、OData メタデータに表示されるアクションを呼び出して、その結果を解析することです。

ネイティブ アクションの呼び出しは WCF Data Services Client では利用できないようです。そのため、HttpClient を使用して自分で実行する必要があります。そうですか?もしそうなら、私はすでにその道を進んでいます。URL をハードコードするのではなく、エンティティでアクションを呼び出したい場合は、(その ODataActionSample から) など、そのエンティティをフェッチする LINQ クエリを作成するだけです。

Movies.Where(m=>m.Id == 1)

それを呼び出す代わりに、.ToString() を実行して、呼び出される URL を取得します。次に、その URL を操作して、パラメーターやアクションを追加します。

これが機能すると仮定すると、JSON が返されます。ODataActionSample の場合、URL http://localhost.fiddler:8708/odata/Movies(3)/CheckOutに POST してムービーをチェックアウトできます。

それは次のようなJSONを返します

{
  "odata.metadata":"http://localhost:8708/odata/%24metadata#Movies/@Element","#CheckOut":{

  },"ID":3,"Title":"Fatal Vengeance 2","Year":2012,"DueDate":"2013-07-24T16:33:14.0699789+10:00"
}

これを、WCF Data Services が既に作成した型付きの Movie オブジェクトに戻すにはどうすればよいですか? 私はそれが可能だと感じており、LinqPad の DataContractJsonSerializer クラスで少し遊んでいますが、これまでのところあまり成功していません。

また、クライアント側のエンティティ コードを拡張する部分クラスのメソッドとして、これらのアクション コールの一部をタイプ セーフな方法でスキャフォールディングするために、T4 テンプレートなどでできることはありますか?

4

1 に答える 1

1

現在、WCF DS クライアントで「マテリアライザー」と呼んでいるものは実際には公開されていないため、ペイロードから簡単に移動する方法はないと思います-> ODatalib で解析します-> 1 番目のクラス オブジェクトにマテリアライズしますそれが生成されました。

代わりに、DataServiceContext で Execute (または Begin/End Execute) メソッドを使用してアクションを呼び出します。はい、これは URL を作成する必要があることを意味しますが、ほとんどの場合、それは大したことではありません。

WCF DS からのアクションの呼び出しについては、この記事を参照してください。

于 2013-07-23T05:37:36.260 に答える