C# 将服务器中的公共数据分发到全球分布的桌面应用程序的最佳方法

C# 将服务器中的公共数据分发到全球分布的桌面应用程序的最佳方法,c#,.net,algorithm,C#,.net,Algorithm,场景:我有一个桌面应用程序在全球范围内使用的通用数据。公共数据将以频繁的方式更改,需要分发到遍布全球的桌面应用程序 接近 桌面应用程序对web服务的调用遍布全球,每次都可以获取公共数据进行处理。 缺点:服务器每次调用桌面都是非常昂贵的操作 将通用数据作为xml文件下载到全球分布的所有桌面应用程序中,如果通用数据发生任何更改,则需要下载更改的数据(这应该是一种推送技术) 缺点:如果不是推送技术,那么成本会很高 是否有任何推送技术来处理上述场景。(即,如果在服务器中进行了任何更改,则仅关闭更改) 上

场景:我有一个桌面应用程序在全球范围内使用的通用数据。公共数据将以频繁的方式更改,需要分发到遍布全球的桌面应用程序

接近

  • 桌面应用程序对web服务的调用遍布全球,每次都可以获取公共数据进行处理。 缺点:服务器每次调用桌面都是非常昂贵的操作
  • 将通用数据作为xml文件下载到全球分布的所有桌面应用程序中,如果通用数据发生任何更改,则需要下载更改的数据(这应该是一种推送技术) 缺点:如果不是推送技术,那么成本会很高
  • 是否有任何推送技术来处理上述场景。(即,如果在服务器中进行了任何更改,则仅关闭更改)


    上面哪种方法比较好,或者有比这更好的方法吗?

    桌面应用程序是否修改了数据,或者它只是 是否由“服务器”定义

    如果服务器修改了数据,并且它是供客户端只读使用的 有很多选择:

    • 您可以将数据存储在共享DropBox文件夹中

    • 您可以向web服务添加一个每次都返回新GUID的方法 数据已更改,让客户端知道应再次下载数据。 从服务器获取单一GUID的成本应该不高(尤其是与一次性下载所有数据相比)

    • 您可以使用RabbitMQ之类的工具将更改扇出到所有客户端(如果可以选择开放TCP连接)


    如果允许桌面客户端修改数据,并且有多个客户端同时修改该数据,您可能希望采用完全不同的方法。但在这种情况下,您的问题中没有足够的信息来真正给您一个好的答案。

    有多少数据?更改的频率有多高?是否多次更改es需要作为一个集合来处理?失败的代价是什么,是使用旧的公共数据运行的客户端还是无法获取最新的公共数据的客户端?为什么您认为这是一个适合这样做的问题?定义缓存策略非常有意义。如果修改http fetch,是否太昂贵?@HABO:大约需要100条记录。New数据可以每月添加一次。一次完成多个更改。如果客户端使用旧数据,可能会出现一些准确性故障,但应用程序工作正常。当客户端使用应用程序时,数据将同步。@Conrad Frix:在web服务级别中实现了缓存(即,如果没有数据更改,它将从缓存中发送数据,否则它将从数据库中获取数据)