-
Подскажите, какие есть способы передачи файла (exe, xls) с сервера приложений на клиента? Использую DCOM.
-
> какие есть способы передачи файла
Способов передачи файла всего один - передача его имени (если это необходимо) и содержимого.
И "трехзвенка" тут совершенно ни причем.
-
Спасибо, я в курсе :-) Интересует передача содержимого.
-
> Интересует передача содержимого
Содержимое обычно передают массивом либо стримом.
-
То есть писать интерфейс самому или что-то готовое уже есть?
-
Для случая со стримом есть готовый интерфейс - IStream. Для случая с массивом проще всего поступить так Result := VarArrayCreate(..), где Result - это OleVariant.
-
Спасибо. Буду пробовать. Правда с IStream пока не совсем ясно, т.к. Transactional Data Module такой тип не поддерживает...
-
> Transactional Data Module такой тип не поддерживает
Зато поддерживается IUnknown.
А IStream есть наследник IUnknown.
-
Вобщем, с трехзвенкой оказалось не все так гладко... Если подключаешься через TDCOMConnection, то можно передавать и через IStream и через массив (пробовал файлы размером до 700 Мб). Если подключаешься через TWebConnection, то IStream не рулит (ошибка что-то вроде "Interface not supported"), мало того, похоже, что никакие наследники IUnknown при таком подключении также не поддерживаются. Но и это еще не все. Массивы данных размером 10-20 мегабайт передаются нормально, а большие не передаются - виснет намертво(вроде httpsrvr.dll, но это не точно). Короче говоря, поскольку мне требовался универсальный механизм для трех типов подключений (TDCOMConnection, TWebConnection, TSocketConnection), пришлось реализовывать передачу через массив порциями по N килобайт.
-
|