【问题标题】:Polling Pattern for Silverlight 4 WCF Ria ServicesSilverlight 4 WCF Ria 服务的轮询模式
【发布时间】:2011-02-01 23:52:58
【问题描述】:

我正在使用 Ria 服务在 Silverlight 中创建一个应用程序,一旦启动服务调用,这可能需要相当长的时间。我一直在寻找增加 WCF 服务超时的方法,但我越想越觉得这不是正确的方法。

我宁愿调用 DomainContext 并立即返回,然后让客户端轮询服务器以了解长时间运行的查询何时完成。

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

有什么想法吗?

谢谢,

-斯科特

【问题讨论】:

    标签: silverlight-4.0 wcf-ria-services


    【解决方案1】:

    看看WCF Duplex Service。它应该可以解决您的问题。

    【讨论】:

    • 我目前正在使用 Ria 服务,它们是 WCF 服务,但看起来它需要大量重构才能启动和运行。由于我遇到的问题,我可能不会再使用 Ria,但我需要在这个项目中坚持使用它。我能够通过在服务器上创建一个 Singleton 并产生多个线程来接近解决方案,但是一旦对服务的调用返回,ObjectContext 就会被释放,并且我的工作线程在遇到实体时会死掉。我真的被困在这里了。
    • @Scott:即使你解决了这个问题,一旦有多个客户端同时轮询,你也不知道要返回给每个客户端什么。
    • 我正在为每个请求将事务分解为碎片的调用者分配一个令牌。客户端然后使用该令牌轮询服务器以查看结果是否存在。我基本上将结果保存在堆中,直到客户端接受它,或者它被另一个保持干净的进程删除。它在纸上看起来不错,但是一旦调用线程离开服务就丢失 ObjectContext 并不是我所期望的。不过感谢您的回复...这将是一个漫长的夜晚...
    • @Scott:所以您正在寻找克隆/复制 ObjectContext 实例的方法?这显然可以解决您描述的问题。我现在必须退出。但是,请让我们知道您如何/如果您解决了这个问题。祝你好运! :-)
    【解决方案2】:

    你能让服务调用花费更少的时间吗?如果没有,为什么不呢?

    通常,当我看到查询需要这么长时间时,这可能意味着最后运行的 SQL 效率不够高,SQL 服务器的索引很差,或者客户端请求的数据比实际要多得多可以在短时间内使用。

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

    【讨论】:

    • 不幸的是,我正在搜索一个搜索索引,根据搜索的术语,它可能会带回数千行。我无法在查询中“跳过”X 个结果,否则我会实施某种分页系统。我真的需要所有的结果——如果不是马上,在搜索后的短时间内。这就是为什么我认为我可以将完整查询的状态保存在服务器上,并在完成后回来获取它。我同意你的观点,这是一次太多的数据,但我找不到其他方法。其他建议?
    • 是不是因为你不控制你要查询的搜索索引?我认为在这种情况下“大多数 RIA 服务方式”是增加超时,而不是轮询 - DomainContext 将需要更长的时间来填充,所以你的 UI 应该有某种指示器,而 LoadOperation正在进行中,但最终它将全部填充INotifyCollectionChanged 事件等以更新 UI。
    • 当然,我建议您与您正在查询的索引的所有者交谈,并让他们知道“嘿,我将请求您的数据超出我的需要并花费您更多的带宽等等……如果你能以分页的方式向​​我公开数据,那对我们双方都会更好”,看看他们怎么说。也许他们会接受这一点,因为这对你们双方都有好处,也有利于该指数的任何未来客户:) 询问永远不会有坏处。
    【解决方案3】:

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

    【讨论】:

    • 我对 WCF RIA 和 silverlight 有类似的情况。您是否有任何示例代码如何将 signalR 与 wcf ria 并排使用?
    • github.com/SignalR/SignalR 看看样本,他们也有一个用于 Silverlight 的样本。
    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多