Отправка и получение больших MTOMAttachments в IBM Content Manager WebService

1

При попытке загрузить большие файлы (100-500 МБ) я получаю знакомое " OutOfMemoryException ", вызванное попыткой сразу прочитать весь файл в памяти (задан и ответил здесь на stackoverflow). Я знаю, что я должен использовать поток или делить файл на более мелкие части. Изменение кода прокси вручную является опцией, если это помогает. Я использую конкретный веб-сервис (CMWebService).

Поскольку я не могу изменить код IBM, есть ли способ отправить файл в более мелкие части? Я уже нашел классы UpdateItemRequestAdd и UpdateItemRequestAddPart, но я не могу заставить их работать. К сожалению, также нет образцов, доступных IBM.

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

Это код, который я сейчас использую для загрузки файлов:

string resources0 = "tiffFileContent";
string resources1 = "image/tiff";
string resources2 = @"D:\myImageFile.tif";

CreateItemRequest createRequest = new CreateItemRequest()
{
    AuthenticationData = data,
    Item = new CreateItemRequestItem()
    {
        ItemXML = new ItemXML()
        {
            MYITEMTYPE = new MYITEMTYPE()
            {
                ArchiveId = "4719",
                ICMBASE = new ICMBASE[] {
                    new ICMBASE(){
                        resourceObject = new LobObjectType()
                        {
                            label = new LobObjectTypeLabel()
                            {
                                name= resources0
                            },
                            MIMEType = resources1,
                            originalFileName = resources2
                        },
                    }
                }
            }
        },
    },
    mtomRef = new MTOMAttachment[] { new MTOMAttachment() {
        ID = resources0,
        MimeType = resources1,
        Value = System.IO.File.ReadAllBytes(resources2),  // Error on large files
    }},
};

var createReply = service.CreateItem(createRequest);
  • 0
    Да, код в этом вопросе помог мне решить несвязанную проблему :-)
Теги:
web-services
mtom

1 ответ

0
Лучший ответ

Мы "разрешили" это, сказав нашему клиенту, чтобы получить более мощную систему с большим объемом оперативной памяти. Имея 4-8 ГБ оперативной памяти, мы могли без проблем загружать файлы до 200 МБ.

Получив большие файлы, Java-HeapSize в IBM Content Manager пришлось увеличить. http://www.mkyong.com/websphere/how-to-increase-websphere-jvm-memory/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню