2010-11-11 57 views
0

我有一堆文件(將近1500,其中一些超過500MB)。基本上,我們有一個缺陷管理系統(Serena Business Mashups,其中一些可能知道它),我需要通過他們的Web服務將這些文件附加到相關問題。可以附加的最大文件大小是500MB。因此,我專注於小於500Mb的文件。此Web服務具有CreateAttachment調用,將文件內容視爲base64二進制類型。將小文件附加到字節數組中並將該字節數組作爲可正常工作的內容傳遞時,我沒有問題。但是,當涉及到大文件時,我總是會忘記內存消耗。我試圖接近很多樣品,並讀取大部分的文章,但他們並沒有幫助我......我甚至試圖分割文件閱讀併合並數組或編碼字符串......沒有成功通過Web服務傳輸文件的最佳實踐C#

我只是想知道你是否有更好的想法來完成這項任務,或者建議我一些最佳做法。

非常感謝您的幫助。

Regards

+0

你在後端使用什麼框架/語言? – 2010-11-11 14:04:55

+0

我忘了指定..對此感到遺憾,這是C#.NET框架3.5 – AnarchistGeek 2010-11-11 14:27:00

+0

處理不當任何人通過web服務保存大文件到數據庫?... – AnarchistGeek 2010-11-12 11:45:55

回答

1

您能否指定您正在談論的語言?聽起來像C#或Java。

如果它是Java中,你可能會想增加你的虛擬機的堆大小。

對於Java,你可以使用這樣的參數(還有更好的方式來解決這個問題,但可以解決它):

java -Xms64m -Xmx1024m appname 

編輯:作爲一般的建議,不加載該文件完全進入內存然後。按照您的描述將其拆分,將塊輸出到套接字並在讀取每個塊後刷新緩存。只是不要關閉套接字/ http連接。通過純HTTP

+0

朱,感謝您的答覆,我做不不說明語言道歉。它是C#並在Visual Studio 2008環境中開發。我希望你現在可以更具體:)感謝問候 – AnarchistGeek 2010-11-11 14:18:53

+0

我不是真正的C#專家。如果您可以在您讀取文件的位置發佈代碼片段並將其輸出到Web服務,我可能會提供幫助。 – Jules 2010-11-11 14:36:09

0

上傳文件可能是不可靠的。我建議你看看後臺智能傳輸服務(BITS)。看看http://www.codeproject.com/KB/IP/sharpBITS.aspx?msg=2815376例如如何從客戶端使用它。

如果需要調用Web服務通過一些屬性和處理文件,您可以上傳BITS完成後做到這一點。

編輯:BITS使用HTTP轉移,但它支持的網絡問題的情況下恢復。很顯然,BITS只是Windows而已:)

+0

Arunas;我必須使用該Web服務來上傳(沒有完全上傳,文件附加到問題並以二進制形式記錄到數據庫)。所以,我基本上沒有將任何文件上傳到FTP服務器。我無法弄清楚如何在自己的場景中應用您的解決方案... – AnarchistGeek 2010-11-12 11:44:45