【发布时间】:2013-02-06 08:25:37
【问题描述】:
最初我有一个预期延迟执行的 LINQ 查询(比如 EF 或任何其他):
class Provider : IProvider
{
public IEnumerable<Any> GetSome()
{
yield return new Any(); // LINQ query
}
}
但是现在这样的提供者转移到了 WCF 服务(和 IoC)中:
unityContainer.RegisterType<IProvider>(
new PerResolveLifetimeManager(),
new InjectionFactory(c => new ChannelFactory<T>("IService").CreateChannel()));
是否可以通过 WCF 调用保留延迟执行?
【问题讨论】:
-
您预计会发生什么?客户应该要求每个项目吗?因为这是通过网络延迟执行所需要的。
-
@DanielHilgarth:是的,我想知道是否可以在具体化时轮流请求每个项目。这是一个示例:我有一些繁重的 EF 调用,WCF 客户端必须等待它完成,而不是序列化整个结果集,将其反序列化,然后才开始迭代。从数据库读取/从服务接收,而不是在最后一个结果之前开始处理第一个结果。
-
那是关于流式传输 - 而不是关于延迟执行......即使使用 WCF 流式传输,它也可能无法正常工作。您必须使用非常低级的 HTTP(分块编码)或 TCP 编程来实现。
-
@LadislavMrnka:我认为这是两个不同的概念。流式传输以服务器规定的速度交付数据。延迟执行以客户设定的速度交付数据。
-
是的。我误解了你的问题。在这种情况下,这正是@Daniel 所描述的内容,您应该在您的服务上简单地公开
GetNext之类的内容并将枚举包装在您的客户端代码中(您将不得不以某种方式跟踪下一个元素是什么)。
标签: c# wcf linq entity-framework-4 deferred-execution