我面临着编写一个在 IIS 上运行的 WCF 服务器以供不同计算机上的其他平台使用的问题。我需要将大量对象(序列化)返回给客户。我需要它是流式的,因为从我的数据库中获取所有数据并根据客户的要求安排它是一个非常漫长的过程,所以我需要客户能够在结果流出时开始处理结果。
在对该主题进行了一些阅读之后,似乎如果我将 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 的意义所在吗?
你对我的问题有更好的建议吗?
最佳答案
我查看了链接中的代码。
看起来 CreateMessage 在服务器上运行,在服务器开始返回任何数据之前将整个结果放在变量消息中。
Message message = Message.CreateMessage(MessageVersion.Soap11, "GetAllCustomers", new CustomBodyWriter(GetAllCustomersImpl()));
return message;
关于c# - 流式处理 WCF 大量对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494791/