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