2009-04-20 82 views
4

我正在写一个简单的会计程序,由几个C#winform客户端和一个将数据读取/写入数据库的java服务器应用程序组成。其中一个要求是所有的C#客户端都应该从服务器接收更新。例如,如果用户从他的C#客户端创建一个新的发票,其他用户应该从他们的客户端看到这个新的发票。服务器应如何将数据推送到富客户端

我的经验主要是关于web开发,我不知道用C#的客户端和Java servlet服务器满足这个需求的最佳方式是什么。

我最初的做法是使用Glassfish运行ActiveMQ并使用消息传递pub/sub方法,以便可以将更新推送到C#客户端。我将创建不同的主题,如newInvoice,cancelInvoice等,以区分消息类型。每条消息都只包含以JSON编码的对象。

但在我看来,这涉及到相当多的工作。鉴于我的用户群非常小(只有3或4个并发用户),在我看来,应该有一些更简单的解决方案。 (我不熟悉套接字编程:))

我知道这是客户端服务器编程的101个问题,但如果有经验的程序员可以指点我一些简单的解决方案,那将是非常棒的。

回答

5

最简单这里的方法通常是简单地使用轮询 - 即让客户端每隔(您的时间间隔)查询数据。这避免了一整套问题(防火墙,安全,视线,解决方案,客户端跟踪等)。

使用WCF,您可以在双工通道上进行回调(允许服务器主动向客户端发送消息),但这更复杂。我重视简单性,所以我通常只是进行投票。

在这里有帮助的技巧是设计系统具有查询“自x以来的变化”的内置机制 - 例如,审计表,可能由数据库触发器提供。当然,每个项目的确切细节都有所不同。

另一个可能需要查看的选项是ADO.NET Sync Services;这可以做很多你所要求的,用于保持数据库的本地副本与服务器保持同步 - 但是它有一些复杂性。这在“本地数据库缓存”VS模板中可用(IIRC)。

0

而不是将信息从服务器推送到1:N客户端,让客户端更频繁地轮询服务器以进行更新吗?或者,当客户端启动并创建与服务器的连接时,服务器可以为该客户端连接动态生成一个新的Message Queue,然后客户端可以轮询更新?

0

有几种推送技术可供您使用,如ActiveMQ(如您所述)或XMPP。但是,如果您只有3或4个客户关心自己,那么轮询将是最简单的解决方案。它不能很好地扩展,但在你的情况下这不是真正的问题,除非你的服务器是8086或者其他的东西)

0

你可能想看看StreamHub Push Server--它的一个流行的Comet服务器在Java中,.NET客户端SDK用于从C#中的服务器接收更新。它还具有Java Client SDK和通常的Ajax/Comet Web浏览器支持,为将来将数据推送到Web,Java和C#客户端提供了更大的灵活性。

相关问题