2012-02-15 114 views
0

我目前正在構建一個處理大量圖像的ASP.NET MVC 3-WebApp,可以說每頁最多100個。 目前WebApp本身爲圖像提供服務。原因是,我想確保只有經過授權和登錄的用戶才能下載圖像。這種方法受到性能的影響,因爲一方面瀏覽器按順序加載圖像,另一方面這個縮放比例不是很好。 因此,我想介紹一個來自另一臺主機的外部WCF-WebService,它服務於圖像並且僅提供圖像。這工作得很好,但目前我不知道如何使下載網址安全。通過WebService安全圖像下載的最佳實踐

在我的網頁可以說「www.imageviewer.com」我想有很多像這樣的圖像標籤: [Image-Tag] Source =「imageservice.imageviewer.com/Download/someID」[/ Image - 標籤]

我知道我可以發送一些加密的安全信息,在用戶名或其他SecurityTokens下載Url,並做一些處理。但這並不妨礙用戶(或其他用戶)可以在另一個瀏覽器中下載圖像,而無需登錄。

我想要一個基於會話的解決方案。在登錄到WebApp後,只有使用有效的會話,瀏覽器才能從WebService下載圖像。

任何想法如何解決這個問題?

回答

1

webservices是新的正則表達式嗎?

有些人在遇到問題時會想「我知道,我會用web服務」。現在他們有兩個問題。

請描述您認爲web服務如何加快您的圖像加載速度?將會有更多的開銷(XML(un))打包,增加另一層代碼),並且由於web服務不像HTTP請求那麼多,所以當你請求一個圖像時,你的瀏覽器仍然會遇到瀏覽器的限制連接。

瀏覽器並沒有真正順序加載圖像,而是以about two to eight at a time的速率加載到同一個域。

Loading the images from different subdomains是一個比較常見的方法,並且增加一些lazy loading會加快它的速度。然後,您仍然可以使用會話,Cookie或標題中存儲的信息保護它。

如果,在另一方面,就是想回答你的問題,沒有友好的建議:你可以簡單地用Custom User Name and Password Validator,在那裏你只需覆蓋驗證來驗證您已知的用戶憑據保護您服務。

+0

我測試過從其他資源下載圖像(不管它是否是web服務或曾經)會給用戶帶來更快的用戶體驗。原因是,我認爲,在瀏覽器完成當前頁面的下載+渲染+ JS處理之前,瀏覽器開始從不同的資源下載圖像。也許我完全錯了。 – 2012-02-15 09:18:46

+0

如果我懶加載來自不同子域的圖像,如何共享會話信息?我想到的唯一想法是使用Out-Of-Process或SqlServer會話。但我想避免這樣做。 – 2012-02-15 09:24:30

+0

@StevenGrigoleit你的第一條評論指出「不同的資源」,當它是另一個(子)域時,它會加載得更快,因爲瀏覽器處理連接的方式,其中我在我的答案中加入了一個鏈接。此外,您可以從IIS中的同一網站提供子域名,以便他們共享所有數據,例如會話和配置(即連接字符串和whatnot)。 – CodeCaster 2012-02-15 12:18:16