Лучшие практики для передачи файлов через веб-сервис C # - PullRequest
0 голосов
/ 11 ноября 2010

У меня есть куча файлов (около 1500, некоторые из них имеют размер более 500 МБ).По сути, у нас есть система управления дефектами (Serena Business Mashups, некоторые из них могут об этом знать), и мне нужно прикрепить эти файлы к связанным проблемам через их веб-сервис.максимальный размер файла, который можно прикрепить, составляет 500 МБ.Поэтому я сосредоточился на файлах размером менее 500 МБ.У этого веб-сервиса есть вызов CreateAttachment, принимающий содержимое файлов в виде base64binary.У меня нет проблем с прикреплением небольших файлов, когда я перерабатываю красный файл в байтовый массив и передаю этот байтовый массив как контент, который работает нормально.Однако, когда дело доходит до больших файлов, я всегда получаю исключение из памяти.Я перепробовал почти все примеры и прочитал большинство статей, но они мне не помогли ... Я даже пытался разбивать файлы, читать их и объединять массивы или закодированные строки ... безуспешно

Мне просто интересно, есть ли у вас лучшая идея для достижения этой задачи, или предложить мне несколько лучших практик.

заранее большое спасибо за вашу помощь.

С уважением

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Не могли бы вы указать, на каком языке вы говорите? Похоже на C # или Java.

Если это Java, вы можете увеличить размер кучи вашего виртуального компьютера.

Для Java вы можете использовать такие параметры (есть лучшие способы обойти эту проблему, но это решило бы ее сейчас):

java -Xms64m -Xmx1024m appname

Редактировать: общий совет: не загружайте файл полностью в память. Разделите его так, как вы описали, выведите чанк в сокет и очистите кеш после чтения каждого чанка. Только не закрывайте сокет / http соединение.

0 голосов
/ 11 ноября 2010

Загрузка файлов через обычный HTTP может быть ненадежной. Я предлагаю вам изучить фоновую интеллектуальную службу передачи (BITS). Посмотрите http://www.codeproject.com/KB/IP/sharpBITS.aspx?msg=2815376, например, как использовать его со стороны клиента.

Если вам нужно вызвать веб-сервис для передачи некоторых атрибутов и обработки файла, вы можете сделать это после завершения загрузки BITS.

Редактировать: BITS использует HTTP для передачи, однако он поддерживает возобновление в случае сетевых проблем. Очевидно, БИТЫ только для Windows:)

...