我正在使用WinForm和WCF的n层应用程序
引擎服务(Windows服务)=> WCF服务=> Windows窗体客户端应用程序
问题是,即使引擎服务已关闭,WinForm客户端应用程序也必须100%可用。
那么为了使winform应用程序始终可用,我怎么能建立一个断开连接的架构?
感谢。
答案 0 :(得分:3)
通常,您实现应用程序内部的队列。
队列会将请求转发给Web服务。如果Web服务关闭,它将保持排队状态。队列机制应该经常检查以查看Web服务是否处于活动状态,然后何时转发它已存储的所有内容。
或者,您可以直接访问Web服务,然后在发生初始故障时将其发布到队列中。但是,队列仍然需要经常检查Web服务。
修改强> 只是澄清一下,是的,所有的业务逻辑都需要客户端。否则,当客户端连接备份时,您需要提供“验证”机制。
但是,这不是一件坏事。正如您应该将业务逻辑放在它自己的程序集中一样。
答案 1 :(得分:1)
查看Smart Client Factory:http://msdn.microsoft.com/en-us/library/aa480482.aspx
只是为了突出目标(这是从上面的链接中删除):
我要按照通常的CYA声明来解决这个问题。让我举几个例子。拿一个应用程序来查看文件系统,以便以任意数量的不同格式(DB2,Flatfile,xml)生成文件。然后,应用程序将导入文件,向用户显示文档的统一视图。并允许他发布电子商务订单。
在这个应用程序中,您可以选择检测文件压缩它们并上传到服务器执行转换(应用业务逻辑,如数据规范化等)。但是,如果互联网连接中断,会发生什么。现在,用户必须等待他的连接才能发出电子商务订单。
更好的解决方案是在客户端中运行业务规则来转换文件。现在让我们说,你有一些基于订单的业务逻辑确定额外的规则,例如推销员将其路由到或定价折扣......这些可能是有意义的坐在服务器上。
您需要问的问题是,当服务器不存在时,我需要什么功能才能使我的应用程序正常运行。任何属于这一类的东西都需要是客户方。
我也从未使用Click Once部署,我们必须推出自己的更新程序,这是另一个线程的故事,但您应该能够轻松地发送更新。您还可以在程序集中编写业务逻辑代码,从URL加载,因此当它在客户端运行时,它可以轻松更新。
答案 2 :(得分:0)
您可以离线执行所有处理,并使用Microsoft Sync Framework等内容来同步客户端和服务器之间的数据。
假设服务器和客户端都是.net,您可以使用相同的代码库在服务器和客户端上进行数据验证。这样,您将拥有一个服务器和客户端的单一代码库。
您可以使用CSLA.NET之类的框架来简化此验证过程。