c# - 图像处理架构设计建议

标签 c# asp.net-mvc wcf architecture .net-4.0

我正在开发一个标准的 ASP.NET MVC 3 Web 应用程序(托管在 IIS 7 上)。该站点允许用户上传照片等。

上传过程如下:

  1. 用户使用小部件(当前为 plupload)从他们的 PC 中选择文件。
  2. AJAX 调用发生在我的服务器上,图像在 HTTP POST (Request.Files) 中
  3. 服务器调整照片大小 N 次
  4. 每张调整大小的照片都上传到 Amazon S3

目前,上述内容是通过使用 .NET 4.0 的 TPL 的“即发即弃”技术实现的。

我想让上面的内容更加灵活和健壮。例如,如果图像处理失败(它使用的是 GDI,所以很可能),或者 S3 出现故障(这会发生),我或用户将不会知道。

我正在考虑将 WCF 服务托管为 Windows 服务,该服务轮询文件夹中的图像。

我的主网站会简单地将图像通过 FTP 传输到“watched”文件夹,然后该服务会负责图像处理和上传。

不需要“立即”通知用户照片已完成。换句话说,现在我们显示“您的图像正在处理中,很快就会可用”的消息。

总而言之,该服务需要:

  1. 调整图片大小
  2. 上传图片到S3
  3. 读/写数据库
  4. 能够“重试”失败的图像

有什么建议吗?是 FileSystemWatcher 一个好的选择?

最佳答案

在我当前的项目中,我们实现了一个类似的中间件服务,负责使用 FileSystemWatcher 进行数据处理,并取得了相对成功。一些需要记住的事情:

  1. 一定要为核心处理实现某种排队。同时启动 100 个图像转换进程不是一个好主意。考虑使用线程池。
  2. FileSystemWatcher 将在文件创建后立即发出通知,此时它可能仍处于只写锁定状态 - 您将必须执行定期检查以确定开始处理的正确时间。可能使用主循环和队列。
  3. 跟踪细粒度的状态变化(如 file_created、file_processing、file_processed、file_uploading 等)。您可能真的需要它们进行调试。

希望这对您有所帮助,祝您好运。

关于c# - 图像处理架构设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869582/

相关文章:

c# - listview:获取子项文本

asp.net-mvc - 通过 AJAX 加载后,部分 View 的 View 模型未绑定(bind)到主视图模型的 View 模型

wcf - 通过.NET 1.1调用.NET 4.0组件

asp.net-mvc - url重写后如何知道原始url?

asp.net-mvc - asp.net mvc 区域默认页面

WCF - 如何接受长字符串作为参数

.net - WCF 和 System.Configuration 命名空间

c# - 如何使用 Roslyn 加载现有程序集、对其进行转换并生成新的 .cs 文件

c# - 我想在 C# unity3D 中实例化一个通用类型

c# - 在 C# 中,将原语一般转换为字符串以进行序列化的安全方法是什么?