我面临着编写一个在 IIS 上运行的 WCF 服务器,以供不同计算机上的其他平台使用。我需要将大量对象(序列化)返回给客户端。我需要它进行流式传输,因为从我的数据库中获取所有数据并根据 cilent 的要求对其进行安排是一个非常漫长的过程,因此我需要客户端能够在结果流出时对其进行处理。
在对该主题进行了一些阅读之后,似乎如果我将 WCF 与 transferMode StreamedResponse 一起使用,我可以返回延迟执行的对象,这可能会满足我的需求。
并实现了与他们描述的类似的 WCF。但是我改变了他们的代码:
for(long i = 0; i < 1000; i++) //All the customers should be read from the database
{
yield return new Customer { FirstName = "Foo", LastName = "Bar", Address = "FooBar 123" };
}
至:
for(long i = 0; i < 1000000; i++) //All the customers should be read from the database
{
yield return new Customer { FirstName = "Foo", LastName = "Bar", Address = "FooBar 123" };
}
所以它会模拟大量的数据。我注意到,当我这样做时,客户端的功能会在返回对象之前停顿几秒钟。
为什么会这样?数据不应该立即开始在流上流动吗?这不是延迟执行的流式 WCF 的重点吗?你对我的问题有更好的建议吗?