c# - 流式处理 WCF 大量对象

标签 c# wcf streaming deferred-execution large-data

我面临着编写一个在 IIS 上运行的 WCF 服务器以供不同计算机上的其他平台使用的问题。我需要将大量对象(序列化)返回给客户。我需要它是流式的,因为从我的数据库中获取所有数据并根据客户的要求安排它是一个非常漫长的过程,所以我需要客户能够在结果流出时开始处理结果。

在对该主题进行了一些阅读之后,似乎如果我将 WCF 与 transferMode StreamedResponse 一起使用,我可以返回具有延迟执行的对象,这可能会满足我的需求。

我阅读了以下文章: http://weblogs.asp.net/cibrax/archive/2008/06/10/streaming-large-content-with-wcf-and-deferred-execution.aspx

并实现了与他们描述的类似的 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 的意义所在吗? 你对我的问题有更好的建议吗?

最佳答案

我查看了链接中的代码。

看起来 CreateMessage 在服务器上运行,在服务器开始返回任何数据之前将整个结果放在变量消息中。

   Message message = Message.CreateMessage(MessageVersion.Soap11, "GetAllCustomers", new CustomBodyWriter(GetAllCustomersImpl()));
   return message;

关于c# - 流式处理 WCF 大量对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494791/

相关文章:

c# - 从 3.5 更新到 4.0 时出现 WCF 问题

iOS StreamingKit 如何录制/保存音频?

api - 通过 Twitter Streaming API 获取所有过去的推文

android - "Battery saver"功能终止我的音乐服务

c# - 在加载 Silverlight 应用程序时替换合并的资源字典

c# - 问题是关于在 ASP.NET 中发送电子邮件

c# - MSMQ 不处理大于特定大小的消息

c# - 每次都会出现权限屏幕

c# - jQuery Accordion 阻止路由链接在 ListView 中工作

wcf - ASP.Net WCF 服务的 Thread.CurrentPrincipal 被联合 (WIF) 环境中的某些拦截器丢弃