2011-05-12 44 views
1

我有一個現有的ASP.NET MVC 2客戶端應用程序,它使用RESTful WCF服務應用程序進行數據持久性。新的要求已經出現,以支持附加/關聯到我現有的一個域對象(產品)的圖像。作爲DTO或單獨上載的一部分的圖像附件(ASP.NET MVC 2和WCF REST)

當前,客戶端應用程序調用服務以獲取產品列表(以輕量級ProductInfo對象列表的形式),並將列表顯示給用戶。當用戶單擊列表中的項目時,客戶端調用服務以獲取支持用戶編輯的特定Product對象。保存後,客戶端將更新後的產品發佈到服務以實現持久性。

新需求要求我在列表中顯示關聯的圖像,並允許用戶在編輯產品時設置/替換圖像。當前圖像也顯示在產品編輯器中。每個產品只有一個圖像將被關聯,並且圖像將是必需的。

  1. 流是在客戶端和服務器之間傳遞圖像數據的最佳方式,還是應該使用Byte []?

  2. 對於這個列表,向Stream(或Byte [])類型的ProductInfo添加一個新的Image屬性是明智的還是需要單獨調用服務來下載圖像?

  3. 同樣對於編輯,我只是​​將圖像數據視爲任何其他屬性,並使用Image屬性在電線上來回傳遞它?

回答

0

雖然我很欣賞Darin的迴應,並且最初走上了這條道路,但我最終採用了Pro ASP.NET MVC 2 Framework中列出的相同方法。

第6章描述瞭如何將圖像作爲產品對象的編輯頁面的一部分進行上傳,然後使用另一頁面中的控制器操作進行顯示。我的應用程序唯一的區別是通過RESTful Web服務接口在不同的層中處理持久性。但是,基於本書所示的方法,我決定使用一個包含二進制圖像數據和字符串MIME類型信息屬性的DTO。

如果我有一個不同的用戶界面或更重的對象來傳遞,我肯定會重新考慮這種方法,但對我來說,這一次,這很好。

1

是流式傳遞客戶端和服務器之間或圖像數據,我應該去用字節[]的最佳方式?

這將取決於您使用的綁定,但使用SOAP,即使您最終選擇流,當序列化程序需要通過線發送它時,它將是一個base64編碼的字節數組。

對於這個列表,向Stream(或Byte [])類型的ProductInfo添加一個新的Image屬性是明智的還是需要單獨調用服務來下載圖像?

我會去一個單獨的電話下載每個圖像給出一個產品ID。這樣,每次您想要查看產品信息時都不會下載圖像,而無需預覽即可節省帶寬。

另一種可能性是從WCF服務中一次加載所有圖像,然後調用將使用AJAX下載它們的控制器操作。然後將它們嵌入在HTML爲Base64數據

同樣的編輯(谷歌確實在結果頁面圖像預覽的方式),我只是把圖像數據的任何其他財產,並通過來回跨越使用Image屬性的導線?

對於編輯,你可以有一個服務方法,它將採取字節數組和你正在更新的項目的ID。

+0

我正在使用WCF REST服務,所以webHttpBinding不使用SOAP。 – SonOfPirate 2011-05-12 20:03:09

+0

編輯產品時,我擔心使用單獨的服務方法時,我會有1次調用來檢索產品詳細信息和另一個以獲取圖像,將其顯示給用戶,讓他們對產品說明進行更改&image,然後在一次操作中將更改提交回服務以更新描述&另一個更新圖像。這是2次操作的4次服務調用(獲取和更新)。這真的是處理它的最好方法嗎?更好地說,在獲取和發送產品時,將圖像數據與其他屬性包含在一起是否有問題? – SonOfPirate 2011-05-12 20:04:47

+0

@SonOfPirate,如果你包含圖像數據作爲產品的一部分(一個'byte []'),你打算如何在HTML中顯示它?在所有''都希望其'src'屬性指向將返回圖像數據的服務器操作或內聯base64編碼。 – 2011-05-12 20:10:23

相關問題