作为DTO的一部分或单独上载的图像附件(ASP.NET MVC 2和WCF REST)

作为DTO的一部分或单独上载的图像附件(ASP.NET MVC 2和WCF REST),wcf,asp.net-mvc-2,wcf-rest,Wcf,Asp.net Mvc 2,Wcf Rest,我有一个现有的ASP.NET MVC 2客户端应用程序,它使用RESTful WCF服务应用程序进行数据持久化。出现了一个新的要求,即支持附加到/关联到我的现有域对象(产品)之一的图像 当前,客户端应用程序调用该服务以获取产品列表(以轻量级ProductInfo对象列表的形式),并向用户显示该列表。当用户单击列表中的某个项目时,客户端将调用该服务以获取支持用户编辑的特定产品对象。保存后,客户端将更新后的产品发布到服务以进行持久化 新要求要求我在列表中显示相关图像,并允许用户在编辑产品时设置/替换

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

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

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

  • 流是在客户端和服务器之间传递图像数据的最佳方式,还是应该使用字节[]

  • 对于列表,将一个新的映像属性添加到类型为Stream(或Byte[])的ProductInfo是明智的还是需要单独调用服务来下载映像

  • 同样,对于编辑,是否将图像数据视为任何其他属性,并使用图像属性在导线上来回传递

  • 流是在客户端和服务器之间传递图像数据的最佳方式,还是应该使用字节[]

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

    对于列表,将一个新的映像属性添加到类型为Stream(或Byte[])的ProductInfo是明智的还是需要单独调用服务来下载映像

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

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

    同样,对于编辑,是否将图像数据视为任何其他属性,并使用图像属性在导线上来回传递

    为了进行编辑,您可以使用一个服务方法,该方法将获取您正在更新的项的字节数组和id

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

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

    对于列表,将一个新的映像属性添加到类型为Stream(或Byte[])的ProductInfo是明智的还是需要单独调用服务来下载映像

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

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

    同样,对于编辑,是否将图像数据视为任何其他属性,并使用图像属性在导线上来回传递


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

    虽然我很欣赏Darin的回答,并且最初是沿着这条路径前进的,但我最终还是采用了中概述的相同方法

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


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

    虽然我很欣赏Darin的反应,并最初沿着这条道路前进,但我最终还是采用了中概述的相同方法

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


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

    我使用的是WCF REST服务,所以webHttpBinding不使用SOAP。在编辑产品时,我关心的是使用单独的服务方法,我将有一个调用来检索产品详细信息,另一个调用来获取图像,将它们显示给用户,让他们对产品描述和图像进行更改,然后在一个操作中将更改提交回服务以更新描述,另一个操作更新图像。这是2个操作(获取和更新)的4个服务调用。这真的是最好的处理方法吗?更好