私はWCF(および一般的には.NET)を初めて使用するため、これが一般的な知識である場合はお詫び申し上げます。
私はWCFソリューションを設計しています(現在、データベースにアクセスするためにEntity Frameworkを使用しています)。データベースから(おそらく非常に大きな)データセットを取得してクライアントに返したいのですが、パフォーマンス上の懸念から、データセット全体をネットワーク経由で一度にシリアル化したくありません。
結果のデータを表すある種のオブジェクトをクライアントに返すように操作したいと思います。また、クライアントでそのデータを処理し、前後に移動して実際のデータを取得できるようにします。必要に応じて配線します。
検索条件に一致する行を個別に見つけるために多くのクライアントコードを記述したくないので、役立つ場合は、個別に呼び出して各レコードを取得します。私はクライアントをできるだけシンプルに保つようにしています。
理想的には、次の擬似コードのようなクライアントコードを記述したいと思います。
Reference1.Service1Client MyService = new Reference1.Service1Client("Service1");
DelayedDataSet<MyRecordType> MyResultSet = MyService.GetAllCustomers();
MyResultSet.First();
while (!MyResultSet.Eof)
{
Console.Writeline(MyResultSet.CurrentRecord().CUSTFNAME + " " + MyResultSet.CurrentRecord().CUSTLNAME);
Console.Writeline("Press Enter to see the next customer");
Console.Readline();
MyResultSet.Next();
}
もちろん、DelayedDataSetは私が作成したばかりのものであり、.NETに存在するようなものを望んでいます。
MyService.GetAllCustomers()を呼び出すと、このDelayedDataSetオブジェクトが返されますが、実際には実際のレコードは含まれていません。CurrentRecord()が呼び出されるまで、実際のデータはネットワーク経由で送信されません。Next()とPrevious()は、サーバー側のカーソルを更新して、適切なレコードを指すようにします。クライアントにデータベースまたはEntityFrameworkを直接表示させたくありません。
私がコードを書いた方法はおそらくWCFでは機能せず、CurrentRecord()、Next()、First()などの関数は個別のサービスコントラクト操作である必要があると思います。サーバーに結果をキャッシュするために独自のコードをすべて記述したり、サーバー側でデータセットを永続化したり、サービスライブラリにすべての取得コードとナビゲーションコードを記述したりすることなく、これを行う方法を探しているだけだと思います。 。私はこれのほとんどが私のためにすでに行われていることを望んでいます。
これは非常に一般的に必要な機能のようです。それで、このようなものは存在しますか?
-ジョー