2014-01-20 33 views
2

我想知道的首选架构会是怎样的情况下首选架构:运行一个单独的进程

我需要有一个.NET应用程序将执行多个数据的批量上传文件的同时向一个SQL Server。这将从WPF应用程序调用,该应用程序将允许用户选择文件和目标表,并报告每个上载的各个进度(包括错误消息)。我完全没有任何问题编写代码。但是,要求用户能够完全关闭WPF应用程序并继续上传过程。此外,如果用户从同一台计算机重新启动WPF应用程序,它应该能够处理现有上传并报告状态,就好像该程序从未关闭一样。

我的问题是达到这个目标的方法是什么,哪一个似乎是最标准/最合适的?

我认为根本没有真正关闭WPF应用程序,但隐藏所有的窗口,但这似乎是一个骗子。最好是在发生上传的服务器上创建WCF服务,并简单地上传文件?虽然我不认为我能做到这一点,并报告进度%等。对于本地运行的Windows服务怎么样,我可以达到类似的效果吗?我应该考虑MemoryMappedFiles吗?

欣赏你所有的想法。

+0

目前在工作中,我设计了一个类似问题的解决方案;我们有一个Web界面,必须执行一个耗时的任务。我最终让Web界面向MsSQL数据库(它已经拥有它)写入请求,并对新请求进行了窗口服务轮询并每5秒处理一次。 –

回答

1

因为您正在谈论长时间运行的任务,所以我会使用本地Windows Service通过MSMQ与您的WPF应用程序进行通信。例如,每个要上传的文件可以由一个MSMQ消息表示。您的WPF应用程序会将消息放入队列和Windows服务中,如果WPF正在运行,它会定期并且不受任何影响地将它从队列和进程中取出。这将提供简单可靠的提供任务(上传)的渠道。

为了向其客户端(您的WPF应用程序)提供Windows服务的内部状态,我将在其内部托管一个WCF端点,并提供简单的服务,例如说明进度。

+0

你明白我的需求。另外,这意味着Windows服务可以轻松地迁移到服务器而不是本地计算机。 – MrShoes