Конференция "Corba" » Как в трехзвенке передать файл с сервера приложений? [Delphi, Windows]
 
  • bronco79 (28.05.07 17:34) [0]
    Подскажите, какие есть способы передачи файла (exe, xls) с сервера приложений на клиента? Использую DCOM.
  • Сергей М. © (29.05.07 09:58) [1]

    > какие есть способы передачи файла


    Способов передачи файла всего один - передача его имени (если это необходимо) и содержимого.

    И "трехзвенка" тут совершенно ни причем.
  • bronco79 (29.05.07 12:52) [2]
    Спасибо, я в курсе :-)
    Интересует передача содержимого.
  • Сергей М. © (29.05.07 12:54) [3]

    > Интересует передача содержимого


    Содержимое обычно передают массивом либо стримом.
  • bronco79 (29.05.07 12:56) [4]
    То есть писать интерфейс самому или что-то готовое уже есть?
  • Сергей М. © (29.05.07 13:06) [5]
    Для случая со стримом есть готовый интерфейс - IStream.
    Для случая с массивом проще всего поступить так
    Result := VarArrayCreate(..), где Result - это OleVariant.
  • bronco79 (29.05.07 13:32) [6]
    Спасибо. Буду пробовать. Правда с IStream пока не совсем ясно, т.к. Transactional Data Module такой тип не поддерживает...
  • Сергей М. © (29.05.07 16:18) [7]

    > Transactional Data Module такой тип не поддерживает


    Зато поддерживается IUnknown.

    А IStream есть наследник IUnknown.
  • bronco79 (19.07.07 21:45) [8]
    Вобщем, с трехзвенкой оказалось не все так гладко...
    Если подключаешься через TDCOMConnection, то можно передавать и через IStream и через массив (пробовал файлы размером до 700 Мб).
    Если подключаешься через TWebConnection, то IStream не рулит (ошибка что-то вроде "Interface not supported"), мало того, похоже, что никакие наследники IUnknown при таком подключении также не поддерживаются. Но и это еще не все. Массивы данных размером 10-20 мегабайт передаются нормально, а большие не передаются - виснет намертво(вроде httpsrvr.dll, но это не точно).
    Короче говоря, поскольку мне требовался универсальный механизм для трех типов подключений (TDCOMConnection, TWebConnection, TSocketConnection), пришлось реализовывать передачу через массив порциями по N килобайт.
  • Polevi © (06.08.07 09:00) [9]
 
Конференция "Corba" » Как в трехзвенке передать файл с сервера приложений? [Delphi, Windows]
Есть новые Нет новых   [134431   +9][b:0][p:0]