【问题标题】:WCF filestream queueWCF 文件流队列
【发布时间】:2015-01-08 23:43:42
【问题描述】:

我正在尝试创建一个 Web 服务,它能够从客户端接收文件,对其进行处理(例如打开 txt 文件,以某种方式更改值等),然后将其提供给客户端已处理。

到目前为止,我所做的事情是我有一个服务+主机和客户端的 WinForm 应用程序,它能够选择文件,发送它,然后获取存储在服务和手动下载选定文件的文件列表返回(我使用 WCF 流)。

接下来我需要做的是创建某种队列 - 让服务器的文件下载过程自动化会很好。但也有可能,在服务器设法处理来自客户端的文件之前,客户端可能会(有意或不)离线,因此服务器将无法将文件发回。

我查看了一些手册和教程,发现有一种称为 MSMQ 的内置技术,可以在 WCF 中使用 - 它只是将数据放入队列中,如果客户端/服务器不可用 atm 并尝试稍后发送。 唯一的问题是,在每本手册中,它们仅使用方法(它们将方法调用放入队列中),而不使用文件。

我的问题是 - 是否有可能以某种方式通过文件流实现 MSMQ?还是我应该选择不同的方法?

提前谢谢你

【问题讨论】:

  • 您应该尝试将字节数组中的文件发送到 MSMQ 服务。
  • 我可以试试,但是 MSMQ 能处理大文件吗?我的同事告诉我,我们将要处理的文件大小可能高达 100MB。
  • 队列不是用来处理文件的,它们是用来处理消息的。如果您有 100MB 的消息,那么您做错了。你想做什么,为什么你认为你需要排队?您确定不会将队列与 Dropbox 和 Onedrive 等同步服务混淆吗?
  • 我们的目标是在客户端连接并处理文件后立即将处理后的文件发送回客户端。但也许 MSMQ 或队列整体不是好的解决方案 - 我知道有用于消息,我只是想知道它们是否也可以用于文件流:)。

标签: c# wcf file-io msmq


【解决方案1】:

您的网络服务应该将上传的图像保存到您服务器上的目录中,然后将 JobID 返回到网页。然后,Web 服务方法还可以使用 System.Messaging 将带有该 JobID(以及所有相关文件信息等)的消息发布到 MSMQ 队列。然后,您可以编写一个使用 MSMQIntegration 绑定的 WCF 服务来侦听此队列。您将在此服务中编写一个方法,该方法将执行您希望对文件执行的任何操作,并且该方法将自动将消息从队列中取出,或者如果该服务处于脱机状态,则消息将保留在那里,直到该服务返回在线。

这是否满足您的需求?

:) 大卫

【讨论】:

  • 感谢您回答大卫。所以基本上我将有一个服务,它将处理下载/上传文件,然后是第二个服务,第一个服务将通知它,有文件准备好处理,对吧?我只需要考虑如何在这些服务中向客户端计算机实现自动文件下载过程 - 因为如果我没记错的话,客户端计算机应该发送下一条消息,它准备好下载文件(所以服务器应该发送任何消息试图首先到达客户)
  • 您可能需要一个数据库表,用于记录作业及其当前状态。当 Web 服务首次上传文件时,它可以在表中输入新作业,状态为 Pending。当 MSMQ 服务完成文件处理后,它可以将状态设置为完成。您的 Web 服务还可以有几个实用方法,例如通过 JobID 检查作业的状态,并假设状态为 Complete,将允许客户端通过传递 JobID 下载完成的文件。
  • 在数据库表中保存作业状态和ID是一个非常好的主意......它应该很容易处理。我是 C# 和 WCF 的初学者,但我认为经过几个教程后,我应该能够实现它。感谢您的时间和回答。祝你有美好的一天。
猜你喜欢
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多