2013-05-08 84 views
8

在同一台计算机上的不同应用程序之间共享数据并在数据发生更改时通知他们的最佳实践是什么?在应用程序之间共享数据和通知的最佳实践

我有4个应用程序正在使用相同的设置项目来更改它们的设置。当我更改项目中的设置时,其他应用程序必须根据此更改进行操作,并且必须知道该设置已更改。

我想到了IPC来进行设置更改,然后将更改信息广播给所有用户,但如果这样的库已经存在,那将会很棒。

编辑:

我发现,为我工作的解决方案。我们决定不在这个功能上花费大量的时间,因为它不是极端关键地更新其他应用程序。

我们将设置保存到一个XML文件中,然后我在该文件上注册FileSystemWatcher以获取所有更改。因此,如果我更改设置,所有4个应用程序都会去读取设置文件并确定他们是否需要采取行动。

回答

1

解决方案要选择取决于不同的参数:

  1. 你多少精力可以投资的实施。
  2. 应用程序将被快速更新的关键程度如何。
  3. 哪些环境可供您/您的客户使用。
  4. ...

例如:

  • 更改保存到数据库/ config文件,并让应用程序运行一个单独的线程,这是专门为检查设置更改每n秒。实现这个解决方案既便宜又容易,但不是“好”,许多开发人员会拒绝这种解决方案。
  • 创建一个WCF服务,将更改“发布”到应用程序。这种情况下,使用双绑定,应用程序将立即更新。当然,这种解决方案的成本更高......

这些只是许多可用解决方案(共享内存,共享应用程序域等)中的2个示例。

+0

Hei 感谢您的回复。我现在找到了一个适合我的解决方案。 – neutron 2013-05-14 09:15:44

+0

Neutron, 只是为了我的好奇心......你选择了哪种解决方案,为什么? – 2013-05-19 11:21:52

+0

嗨阿米特,我编辑了主帖,并用我选择的解决方案进行了扩展。我选择了这个解决方案,因为它是当前上下文中最简单/最便宜的方式,应该可以正常工作。 – neutron 2013-05-21 11:15:50

0

如何使用内置的依赖对象? 像:

  1. 的CacheDependency - http://msdn.microsoft.com/en-us/library/system.web.caching.cachedependency.aspx
  2. 的SqlDependency - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

这些都是实现非常简单,他们工作得很好

+0

我有一个winforms应用程序,不使用数据库。而CacheDependency仅适用于Web应用程序,不是吗? – neutron 2013-05-14 09:14:26

+0

嗨, 如果你使用.net 4那么没有。 有一个新的命名空间http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx System.Runtime.Caching。 我已经在这里找到了它的用法示例: http://www.codeproject.com/Articles/290935/Using-MemoryCache-in-Net-4-0 – JanivZ 2013-05-19 11:47:49

1

您所做的一切似乎wisely.And我有另一种使用经验MSMQ。 您可以创建私人队列或公共队列,因为您将所有应用程序都放在同一台机器上,所以私人队列是可以的,否则您应该使用公共队列。 在那段时间我选择了Spring.Net作为我的框架(对象生成器&依赖注入器)。 Spring.net有辉煌的快速入门和其中之一是使用MSMQ作为沟通桥之间的应用程序。 如果我是你,我会利用排队方法,因为你可以通知在不同机器上运行的应用程序。

另外,WCF为在底层MSMQ组件上开发分布式服务提供了便利的方法。

此外,Publish-Subscribe是一种常用的设计模式,广泛应用于客户端/服务器通信应用。在WCF服务发展,发布 - 订阅格局将 也在这些方案帮助这里的服务应用程序将公开数据,某些群体有兴趣的服务和数据提供给客户作为推动客户 模型 积极(而不是客户端轮询)

0

网络套接字如何?您可以让听众和发件人在不同的端口上