1

我有一个现有的 ASP.NET MVC 2 客户端应用程序,它使用 RESTful WCF 服务应用程序进行数据持久性。出现了一项新要求,以支持附加/关联到我现有的域对象(产品)之一的图像。

目前,客户端应用程序调用该服务来获取产品列表(以轻量级 ProductInfo 对象列表的形式)并将该列表显示给用户。当用户点击列表中的某个项目时,客户端调用服务来获取支持用户编辑的特定产品对象。保存后,客户端将更新后的产品发布到服务以保持持久性。

新要求要求我在列表中显示关联的图像,并允许用户在编辑产品时设置/替换图像。当前图像也显示在产品编辑器中。每个产品只会关联一张图片,并且该图片是必需的。

  1. Stream 是在客户端和服务器之间传递图像数据的最佳方式还是应该使用 Byte[]?

  2. 对于列表,将新的 Image 属性添加到 Stream(或 Byte[])类型的 ProductInfo 或需要单独调用服务以下载图像是否明智?

  3. 同样对于编辑,我是否只是将图像数据视为任何其他属性并使用 Image 属性来回传递它?

4

2 回答 2

1

Stream 是在客户端和服务器之间传递图像数据的最佳方式还是应该使用 Byte[]?

这将取决于您使用的绑定,但使用 SOAP 即使您最终选择 Stream,当序列化程序需要通过线路发送它时,它将是一个 base64 编码的字节数组。

对于列表,将新的 Image 属性添加到 Stream(或 Byte[])类型的 ProductInfo 或需要单独调用服务以下载图像是否明智?

我会单独调用以下载给定产品 ID 的每个图像。这样一来,您就不会每次想要在没有预览的情况下查看产品信息时都下载图像,这可以节省带宽。

另一种可能性是从 WCF 服务一次性加载所有图像,然后调用将使用 AJAX 下载它们的控制器操作。然后将它们作为 base64 数据嵌入到 HTML 中(Google 在结果页面中使用图像预览的方式)

同样对于编辑,我是否只是将图像数据视为任何其他属性并使用 Image 属性来回传递它?

对于编辑,您可以有一个服务方法,它将获取字节数组和您正在更新的项目的 id。

于 2011-05-12T19:19:29.557 回答
0

虽然我很欣赏 Darin 的回应并最初走上了这条道路,但我最终还是采用了Pro ASP.NET MVC 2 Framework中概述的相同方法。

第 6 章描述了如何将图像作为 Product 对象的编辑页面的一部分上传,然后使用控制器操作在另一个页面中显示。我的应用程序的唯一区别是持久性是通过 RESTful Web 服务接口在不同的层中处理的。然而,基于书中介绍的方法,我决定使用一个包含二进制图像数据属性和字符串 MIME 类型信息的 DTO。

如果我有不同的 UI 或更重的对象要传递,我肯定会重新考虑这种方法,但对我来说,这一次非常有效。

于 2011-05-18T17:22:15.993 回答