我是 WCF 的新手(和一般的 .NET),所以如果这是常识,我深表歉意。
我正在设计一个 WCF 解决方案(目前使用实体框架来访问数据库)。我想从数据库中获取一组(可能非常大)数据,并将其返回给客户端,但由于性能问题,我不想一次通过网络对整个数据集进行序列化。
我想操作以将某种对象返回给客户端,该对象代表结果数据,我想在客户端处理该数据,能够前后导航并通过根据需要接线。
我不想编写大量客户端代码来单独找出哪些行符合我的搜索条件,然后在我可以提供帮助的情况下单独调用以获取每条记录。我试图让客户尽可能简单。
理想情况下,我想编写类似于以下伪代码的客户端代码:
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() 将简单地更新服务器端的游标以指向适当的记录。我不希望客户端对数据库或实体框架有任何直接可见性。
我猜我编写代码的方式可能不适用于 WCF,并且 CurrentRecord()、Next()、First() 等函数必须是单独的服务合同操作。我想我只是在寻找一种方法来做到这一点,而不必编写我自己的所有代码来缓存服务器上的结果,以某种方式持久化服务器端的数据集,在我的服务库中编写所有检索和导航代码等.我希望这大部分已经为我完成了。
看起来这将是一个非常普遍需要的功能。那么,这样的事情存在吗?
-乔