Silverlight 4.0 Silverlight 4 WCF Ria服务的轮询模式

Silverlight 4.0 Silverlight 4 WCF Ria服务的轮询模式,silverlight-4.0,wcf-ria-services,Silverlight 4.0,Wcf Ria Services,我正在Silverlight中使用Ria服务创建一个应用程序,一旦服务调用启动,这个应用程序可能会花费很多时间。我一直在寻找增加WCF服务超时的方法,但我越想越仔细,这不是正确的方法 我更愿意做的是调用DomainContext并立即返回,然后让客户端轮询服务器,以确定长时间运行的查询何时完成 我正在寻找一种模式或示例,来实现类似的功能。不断浮现在脑海中的一个潜在问题是web服务不应该在服务调用之间保持状态,但这正是我要做的 有什么想法吗 谢谢 -斯科特你能让服务电话花更少的时间吗?若否,原因为

我正在Silverlight中使用Ria服务创建一个应用程序,一旦服务调用启动,这个应用程序可能会花费很多时间。我一直在寻找增加WCF服务超时的方法,但我越想越仔细,这不是正确的方法

我更愿意做的是调用DomainContext并立即返回,然后让客户端轮询服务器,以确定长时间运行的查询何时完成

我正在寻找一种模式或示例,来实现类似的功能。不断浮现在脑海中的一个潜在问题是web服务不应该在服务调用之间保持状态,但这正是我要做的

有什么想法吗

谢谢


-斯科特

你能让服务电话花更少的时间吗?若否,原因为何

通常,当我看到查询耗时这么长时,要么意味着最后运行的SQL不够高效,要么SQL server的索引很差,要么客户机请求的数据远远超过了他们在短时间内实际能够使用的数据量


例如,与其立即请求500个实体并显示一个大列表/DataGrid/什么的,为什么不一次请求10-50个实体,并拥有一个分页UI,当用户需要它时,它只请求下一个批次?

看看下面的页面。它应该可以解决您的问题。

看看signalr,它可以与ria并行运行,让您可以将消息从服务器推回到客户端

不幸的是,我正在搜索一个搜索索引,根据搜索的术语,它可能会返回数千行。我不能“跳过”查询的X个结果,否则我将实现某种分页系统。我真的需要所有的结果-如果不是立即,在搜索后的短时间内。这就是为什么我认为我可以在服务器上保存完整查询的状态,并在完成后返回并获取它。我同意你的观点,这是太多的数据,无法立即恢复,但我找不到其他方法。其他建议?是因为您不控制正在查询的搜索索引吗?我认为在这种情况下,“最常用的RIA服务方式”是增加超时时间,而不是轮询-填充
DomainContext
需要更长的时间,因此在
LoadOperation
进行时,您的UI应该有某种指示,但最终,它将全部填充
INotifyCollectionChanged
事件等来更新UI。当然,我建议您与正在查询的索引的所有者交谈,并让他们知道“嘿,我会要求你提供比我需要的更多的数据,并花费你更多的带宽等等……如果你能以分页方式向我公开数据,对我们双方都会更好“看看他们怎么说。也许他们会接受这一点,因为这对你们两个都有好处,而且对这个索引的任何未来客户都有好处:)问起来也没什么坏处。我现在使用的是Ria服务,这是WCF服务,但看起来需要进行大量重构才能使其正常运行。我可能不会再使用Ria了,因为我遇到了一些问题,但我需要在这个项目中坚持使用Ria。我可以通过在服务器上创建一个单例并生成多个线程来接近解决方案,但只要服务的调用线程返回,ObjectContext就会被释放,我的工作线程在命中实体时就会死亡。我真的被困在这里了。@Scott:即使你解决了这个问题,你也不知道当你有多个客户端同时轮询时,应该返回给每个客户端什么。我正在为每个请求将事务分解的调用方分配一个令牌。然后,客户机使用该令牌轮询服务器,查看结果是否存在。我基本上是将结果保存在堆中,直到客户机接收它,或者它被另一个保持干净的进程删除。理论上看起来不错,但调用线程一离开服务就失去ObjectContext并不是我所期望的。不过谢谢你的回复。。。这将是一个漫长的夜晚…@Scott:那么你在寻找克隆/复制ObjectContext实例的方法?这显然可以解决你描述的问题。我现在要注销了。但是请告诉我们你是如何解决这个问题的。祝你好运!:-)我与WCF RIA和silverlight的情况类似。你有没有关于如何将signalR与wcf ria并排使用的示例代码?看看这些样品,他们也有一个用于Silverlight的。