2010-08-02 49 views
1

我正在看编写一个WinForms应用程序,并越来越难以理解似乎是一个简单的问题。N层与C#?

有一个服务器和数据库(SQL Server)开放的端口是HTTP,HTTPS

有一个WinForms客户端。它需要将TCP/IP流(可能是HTTP,SOAP,REST)连接到服务器。

有时WinForms客户端脱机,然后WinForms客户端将其数据存储在数据库中。

当WinForms客户端联机到服务器时,它将数据同步到服务器,从服务器获取所有最新数据并更新本地数据库。

我该怎么做?

新手问题

+0

相关问题。是否有一种服务构建器,或者可以与N层一起使用的ORM层或者以这种方式使用? – buttercup 2010-08-02 14:46:58

+0

看到我的编辑相关答案。 – marr75 2010-08-03 04:50:27

回答

2

正如你所承认的,这个问题表明你可能不知道从哪里开始寻找如何构建这种应用程序。

我会从这里开始:http://msdn.microsoft.com/en-us/library/ms973279.aspx

你所描述的离线架构是一个新手有点艰难比不支持此,考虑使应用程序仅联机工作,再加入离线功能。另外,如果你有一个Web服务器,你几乎总是会使用HTTP,SOAP和REST是位于HTTP之上的策略。我不建议新开发人员查看使用直接TCP/IP的任何服务器通信。

编辑:回答相关问题 - 有大量的ORM和服务构建者,并不是他们中的很多人都支持脱机工作流程,但ODX确实如此,但它可能有点过时。 NHibernate和Castle Project中的任何项目都是非常受欢迎的组件,用于您要做的事情。

2

不知道如何积极,这是仍然由微软支持的,但你可以看看智能客户端软件工厂,它似乎支持离线模式和智能重连像你所需要的。

http://msdn.microsoft.com/en-us/library/ff709809.aspx

+0

计划未更新智能客户端软件工厂。 – 2012-08-10 14:15:27

0

一般情况下,你需要一个本地数据库,或者至少一个本地缓存。

+0

嗨, 本地WinForms客户端上已经有数据库。只是不确定如何同步到服务器。 – buttercup 2010-08-02 14:52:41

+0

正如nonnb所说,那部分并不那么简单。最简单的方法是保持流动单向性,通过用真实数据库中的数据提取替代本地数据库。否则,您可以使用时间戳帮助您确定自上次同步以来客户端上的哪些记录已更改。但是,您还必须确保不覆盖其他人的更改。 – 2010-08-02 14:59:40

1

你可以通过'服务'思维来解决这个问题 - 写一个WebService(最好是一个WCF服务) - 在你的Winforms应用程序之间形成同步层。和远程数据库。

所以,你应该有你的
1.本地WinformsApp。与本地数据库(如功能性/轻量,你希望它是)
2. WebService的
3.远程app./DB

1

恕我直言,这通常不是那么简单,因为它听起来

  • 如果你能去到DB数据库,然后SQL复制可能是同步的最简单的机制。
  • 然而,因为它听起来就像你正在使用SOA方法,你可能需要看看这些离线支持内置的框架,如耳鼻喉科库Composite Application Block和智能客户端软件工厂
  • 你也可以看看使用队列(例如MSMQ)适应网络连接问题。