【问题标题】:Preferred architecture for running a separate process运行单独进程的首选架构
【发布时间】:2014-01-20 20:21:25
【问题描述】:

我想知道以下情况的首选架构是什么:

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

我的问题是实现这一目标的方法是什么,哪种方法看起来最标准/最合适?

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

欣赏你所有的想法。

【问题讨论】:

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

标签: c# .net wpf architecture


【解决方案1】:

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

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

【讨论】:

  • 您可以根据我的需要找到它。此外,这意味着可以毫不费力地将 Windows 服务迁移到服务器而不是本地计算机。
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多