0

私は WCF が初めてで、何かを理解するのに助けが必要です。

サービスによってエンティティからマップされた DTO を返す WCF データ サービスを作成しました。私のサービス コントラクト インターフェイスには、 をGetMyDto返すメソッドがありますIQueryable<MyDto>

MVC アプリでこのサービスへのサービス参照を追加しました。インターフェイスとプロキシ クライアントは、List<MyDto>代わりに を返します (または、他のいくつかのコレクション タイプを選択できます) IQueryable<MyDto>

クライアントに公開できないことは理解IQueryableしていますが、クライアントでフィルタリングすると (つまりMyServiceClient.GetMyDto().Where(x => x.SomeValue == 1))、クライアントまたはサーバーでフィルタリングされますか?

私の理解では、odataを使用できますが、これについて私が目にするすべての例は、エンティティモデルをクライアントに直接公開していますが、これは行っていません。私はDTOを使用しています。

私の制限は何ですか?サービスを呼び出すときに何が起こっているのかを正確に理解するのに役立ちます。

4

2 に答える 2

1

IQueryableWCF Data Servicesのポイントは、クライアントに公開することです。クエリを実行しているデータサービスクライアントを使用する場合IQueryable。クエリはODataクエリ文字列(URLの一部)に変換され、実行のためにサーバーに渡されます。

クライアント側のフィルタリングが必要な場合は、最初に次のようなものを使用してすべてのデータをクライアントアプリケーションにロードする必要があります。MyServiceClient.GetMyDto().ToList()その後、リストでlinq-to-objectsフィルタリングを実行できます。

于 2012-07-16T09:42:58.930 に答える
1

ラディスラフが言ったことに追加します(これは完全に正確でした):

DTO を使用している場合は、Reflection Provider ランドまたは Custom Provider ランドのいずれかにいます。カスタム プロバイダーを使用すると、高度なカスタマイズが可能になりますが、かなりの学習曲線が必要です。AlexJ には、まさにそのトピックに関する優れたブログ投稿シリーズがあります。リフレクション プロバイダーには、現時点で残念な制限がいくつかありますが、それらを具体的に列挙するのは難しいため、試してみて、どこで問題が発生するかを確認することをお勧めします。これらの制限に達していなければ、非常に使いやすく、おそらくサービスの構築に役立つでしょう。

チームの何人かのメンバーは、私たちのプロバイダー ストーリーを改善したいと考えています。近い将来に取り組む優先事項になるとは約束できませんが、修正できる小さなことがあれば、ぜひお知らせください.

于 2012-07-16T15:36:01.780 に答える