2012-03-08 23 views
3

我正在創建一個服務,將從服務器上下載文件,我對這方面的知識有限,並要求提供有關該服務設置的建議。WCF最佳實踐/配置流式下載

我已經排除了完整的文件緩衝,因爲會影響服務器的內存使用情況。

哪種綁定最適合在WCF中安全流式傳輸下載? 的wsHttpBinding,basicHttpBinding的,NetTcpBinding的等

,如果它沒有太多的麻煩,你可以寫上幾行說:爲什麼你的答案正確適合的功能?(所以我從答案學習)

感謝

ry4n

(目前正在VS2008)

還有什麼樣的格式將信息最好返回到搭載Android食用?

更新*更多信息: 文件大小:1MB和1GB,多併發下載之間。

我應該使用哪種WCF配置來實現此功能?

+1

我建議谷歌帶來幾個好鏈接 - 這是一個候選人:http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP – dice 2012-03-08 11:53:44

+0

甚至更好:http://blogs.msdn.com/b/endpoint/archive/2010/11/24/streaming-over-http-with-wcf.aspx;) – dice 2012-03-08 12:09:16

+0

我認爲這些簡單的例子並沒有考慮到事實,在發送/接收它之前,IIS和WCF客戶端都喜歡將整個文件緩存到內存中。 感謝這一點,我們有自己的複雜的文件下載/上傳基礎設施,以解決這個問題。 – Euphoric 2012-03-08 12:20:50

回答

1

未流式模式:大多數熟悉WCF的人都會說NetTcp與TransferMode.Streamed,但是存在嚴重的性能問題。流式傳輸可讓您容納更多的併發下載,因爲它不會佔用服務器的內存,但WCF具有不可覆蓋的流塊大小,會降低下載速度,超過100MB的文件將顯着減慢其他方法的速度。

我建議實行分塊方法的方法,如

byte[] GetBytes(int chunkNumber); 

在客戶端的下載,你可以拼接塊。使用HttpBinding來實現互操作性,因爲所有傳輸的都是字節,所以您不會因NetTcp綁定而承受太多的開銷。