Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Привет всем. Вот, возникла проблема, не могу обойти. Суть такая, есть удаленный com-сервер, к которому обращается клиент, в com-сервере прошита бизнесс-логика программы, т.е. система базовых классов, таких к примеру как документ с табличной частью. Таблица формируется в результате запроса к mssql, т.е. на стороне com-сервера данные получаю, проблема же в передаче полученного курсора на сторону клиента. Пока решение видел, до текущего момента, в следующем. В классе документа (на стороне сервера в части бизнесс-логики) есть пропертя класса XmlAdapter, в котором и хранится в виже xml данный курсор (собственно табличная часть документа), на стороне клиента имею ссылку на удаленный объект бизнесс-класса, имею данную пропертю, но не могу обратиться к ней как к объекту XmlAdapter-класса, дебаггер видит ее как просто Object//// Дык вот - можно ли как нить привести тип данной проперти (Object) к типу XmlAdapter ///??? Вообще, есть ли другой какой нибудь способ передать данные курсора (в виде xml или еще как) c удаленного com-сервера на сторону клиента ? Вариант резать полученный xml по строчкам не пойдет, так как вопрос производительности решения также важен... С уважением duШes ....return ThisForm.exGrid1.p_oColumns("COLUMN1").M_AddHeader("header4",4) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 12:54 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Просмотрите пример Веб-Сервиса, который идет с 8-кой. Там СОМ сервер возвращает чистый XML. Клиент с помощью XMLAdapter конвертирует обратно в курсор (если ХМL содержит несколько таблиц - иерархический документб сответственно формируется несколько курсоров). Все красиво и просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 13:45 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Можно поподробнее...куда смотреть? для меня xml seb services почему-то прочно ассоциируюся с .net... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 13:52 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
авторВообще, есть ли другой какой нибудь способ передать данные курсора (в виде xml или еще как) c удаленного com-сервера на сторону клиента? Как-то делал, примерно так На стороне сервера Код: plaintext 1. 2. 3. На стороне клиента Код: plaintext 1. Надо сказать, что скорость ещё та получается, хотя ~ 1000 записей тянутся за приемлемое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 13:53 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
PaulWist Надо сказать, что скорость ещё та получается, хотя ~ 1000 записей тянутся за приемлемое время. Если записей больше, то преобразуете в текст с разделителями и тянете уже его... Получется гораздо быстрее (но не так современно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 14:16 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Можно поподробнее...куда смотреть? C:\Program Files\Microsoft Visual FoxPro 8\Samples\WebServices\Northwind для меня xml seb services почему-то прочно ассоциируюся с .net... Еще java, perl, Visual FoxPro :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 14:28 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
PaulWist... Как-то делал, примерно так На стороне сервера Код: plaintext 1. 2. 3. На стороне клиента Код: plaintext 1. Надо сказать, что скорость ещё та получается, хотя ~ 1000 записей тянутся за приемлемое время. Пропертя может быть всего 16 кб, если у меня курсор с большим объемом данных, то придется парсить, а это уже потеря производительности :(+ предварительная проверка на объем полученного xml как лишняя операция я, в принципе, рассматривал такой вариант, но уж больно некрасиво это...жаль что в фоксе нет приведения типов (оно конечно есть с простыми типами, простые типы для фокса это чтото вроде Variant-структуры) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 14:31 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
авторПропертя может быть всего 16 кб, если у меня курсор с большим объемом данных, то придется парсить, а это уже потеря производительности :(+ предварительная проверка на объем полученного xml как лишняя операция Из этого положения ес-но можно вывернуться. автор...жаль что в фоксе нет приведения типов не я этого не утверждал, просто не знаю как можно реализовать. Для моей задачи вполне хватило проперти массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 14:43 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Dushes Пропертя может быть всего 16 кб, если у меня курсор с большим объемом данных, то придется парсить, а это уже потеря производительности :(+ предварительная проверка на объем полученного xml как лишняя операция Вы говорите на каком-то непонятном языке... Передать на клиент можно 16 Mb если об этом идет речь...Ну а преобразование из данных -> в XML а на клиенте из XML -> в данные все это от "лукавого" - можно передать сразу готовую таблицу или, что быстрее - текст с разделителями... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 14:47 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Кстати VFP3 VFP5 Maximum # of characters per character string 2 gigabytes VFP5 - 9 Maximum # of characters per character string or memory variable 16,777,184 Sergey Ch Sergey Chможно передать сразу готовую таблицу Приведите, пожалуйста пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 15:01 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Sergey Ch Передать на клиент можно 16 Mb если об этом идет речь...Ну а преобразование из данных -> в XML а на клиенте из XML -> в данные все это от "лукавого" - можно передать сразу готовую таблицу или, что быстрее - текст с разделителями... Насчет 16 мб - с этим согласен, ответил неподумав...а вот насчет передачи сразу же готовой таблицы - оригинально;)))) , не подскажете как? Вся com-технология (имею в виду в рамках фокса) базируется на передаче простых типов, построенных на базе Variant, а вот если потребуется передать объект какого-либо класса, придется писать stup|proxy и реализовать свой маршаллинг...поясните мне плиз, как это можно вообще реализовать на фоксе? Да бог с ним реализовать..допустим такой сервер я напишу...но покажите мне как я смогу на стороне клиента в фоксе реализовать такой маршаллинг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 15:21 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
DushesНасчет 16 мб - с этим согласен, ответил неподумав...а вот насчет передачи сразу же готовой таблицы - оригинально;)))) , не подскажете как? Очень просто - загнать таблицу в поле BINARY MEMO таблицы (курсора) с одной строкой - затем преобразовать в XML как BINARY поле - далее этот XML файл передается на клиент где из XML мгновенно вытаскивается одна строка в курсор а далее из BINARY MEMO таблица записвается на диск... Работает на несколько порядков быстрее чем стандартный подход в XML Хотя тут XML присутствует - одна строка Если все еще нужен пример кода - скажите - пришлю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 16:30 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Блин все надо делать через XmlAdapter, а не через простой но убогий, глючный и тормозной CursorToXml(). В чем проблема я вообще не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 16:33 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Sergey Chдалее этот XML файл передается на клиент какой механизм передачи используется, те как клиент этот файл получит, через что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 16:46 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
CripБлин все надо делать через XmlAdapter, а не через простой но убогий, глючный и тормозной CursorToXml(). Кстати, Crip дело говорит, попытай этот вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 17:10 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
CripБлин все надо делать через XmlAdapter, а не через простой но убогий, глючный и тормозной CursorToXml(). В чем проблема я вообще не понимаю? - XmlAdapter работает очень долго (медленно) с большими файлами - CursorToXml() работает быстро, надежно (боюсь, что Вы его спутали с XmlToCursor()) P.S. Мы уже кажется тут выясняли про скорость работы XmlAdapter но к сожалению каждый остался при своем мнении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 17:31 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
PaulWist какой механизм передачи используется, те как клиент этот файл получит, через что? Я использую стандартный пакет SOAP 3.0 (не тот что идет в комплекте с VFP а немного более свежий с MS сайта, НО - он не будет скоро больше поддерживаться Большим братом, по этому смотрю в сторону разрабртки Web Services на основе .NET) Хорошая статья о XMLAdapter тут: тынц Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2005, 17:38 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Hi Dushes! Значительно проще и быстрее будет вернуть данные в виде строки - неважно будет это XML полученный из таблицы, или собственно таблица, полученная как FILETOSTR() и закодированная в BASE64 через SDRCONV() 2 Sergey - не нужно лишних телодвижений с memo binary. Кстати получаемая по FILETOSTR() строка может быть и больше 16 Mb - там как-то по другому ограничение считается, НО моё глубокое убеждение состоит в том, что ТАКИЕ объёмы данных через COM вынимать не стоит ни в коем случае. Кстати насчёт скорости разбора XML - тут оказывается огромное значение имеет флаг "Preserve white space" - где-то это подробно обсуждалось, то-ли в FIDO, то-ли тут, то-ли на foxclub.ru... Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 00:37 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov FILETOSTR() и закодированная в BASE64 через SDRCONV() 2 Sergey - не нужно лишних телодвижений с memo binary. Пробовал, но у меня получалось медленнее чем я остановился на варианте: APPEND MEMO body FROM (UPPER(m.lctxtfile)) OVERWRITE Сейчас в реале уже более 6 месяцев гоняется по несеольку раз в день 4 и 12 Mbytes... Все очень быстро по выделенным каналам связи :) Ну а сами преобразрвания таких объемов занимают секунды Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 09:33 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi Dushes! Значительно проще и быстрее будет вернуть данные в виде строки - неважно будет это XML полученный из таблицы, или собственно таблица, полученная как FILETOSTR() и закодированная в BASE64 через SDRCONV() 2 Sergey - не нужно лишних телодвижений с memo binary. Кстати получаемая по FILETOSTR() строка может быть и больше 16 Mb - там как-то по другому ограничение считается, НО моё глубокое убеждение состоит в том, что ТАКИЕ объёмы данных через COM вынимать не стоит ни в коем случае. Кстати насчёт скорости разбора XML - тут оказывается огромное значение имеет флаг "Preserve white space" - где-то это подробно обсуждалось, то-ли в FIDO, то-ли тут, то-ли на foxclub.ru... Posted via ActualForum NNTP Server 1.1 Игорь, привет. Очень дельный совет, респект. Igor Korolyovчто ТАКИЕ объёмы данных через COM вынимать не стоит ни в коем случае Это понятно, но в начале темы я достаточно подробно описал суть задачи - хотца на бизнесс-уровне создать некий класс, на стороне клиента я должен создать объект данного класса с уже загруженной табличной частью...я понимаю, что можно создать в классе метод чтото типа "ИнициализоватьМеня", в котором на основания хэндла соединения будет подгружена табличная часть ну и так далее, который я и буду вызывать уже на стороне клиента, но пока не уверен в "чистоте" решения .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 09:35 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Hi Dushes! Я не понимаю, у тебя что "табличная часть" некоторого документа содержит тысячи (и даже наверное сотни тысяч! чтоб такие объёмы вышли) записей? Или ты всё-же "неправильно" с точки зрения клиент-сервера работаешь - вынимая ВСЕ строки, а не только те что относятся к "текущему" документу? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 02:19 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi Dushes! Я не понимаю, у тебя что "табличная часть" некоторого документа содержит тысячи (и даже наверное сотни тысяч! чтоб такие объёмы вышли) записей? Или ты всё-же "неправильно" с точки зрения клиент-сервера работаешь - вынимая ВСЕ строки, а не только те что относятся к "текущему" документу? Привет, Игорь. понятно что с точки зрения клиент-серверной технологии неправильно тащить на сторону клиента большой объем данных, НО , если я пишу класс, он должен удовлетворять даже нештатным ситуациям - ну не хочется мне делать класс, который "вот так вот могу при таких условиях, а вот так даже пожалуй смогу" ;) - т.е. сразу на этапе проектирования интерфейса класса накладывать ограничения имхо некрасиво...поэтому условие что Igor Korolyov"табличная часть" некоторого документа содержит тысячи (и даже наверное сотни тысяч! чтоб такие объёмы вышли) записей? должно быть тоже предусмотрено, как это не странно... ps: вообщем, даже не знаю ка кдальше жить :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 09:36 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Hi Dushes! Ты наткнулся на ограничение по длинне строки передаваемой через COM? Или ты всё-же опасаешься за производительность? Если второе, то забей - если тупой клиент захотел получить свои 100000 записей - пускай сидит и ждёт - следующий раз он сначала подумает головой, прежде чем такие условия отбора задавать (или НЕ задавать). Т.е. явно не ограничивай, но и "оптимизировать" эту заведомо "неправильную" ветку не стоит. P.S. Даже если ты передашь ссылку на XMLAdapter, или другой объект а не на "голый XML" - это никак не уменьшит объём прокачиваемых данных, а скорее даже увеличит. Объект через COM НЕ передаётся, просто создаётся особого рода "канал" (Proxy/Stub в случае "удалённого COM") по которому передаются "вызовы методов", параметры и возвращаемые значения. В общем всё это есть в специализированной литературе по COM... P.P.S. Михаил Дроздов как-то рассказывал, что он "скрещивал" 3-х звенку с 2-х звенкой, т.е. к тем данным которые не нужно обрабатывать (тот-же справочник или список чего-то) он обращался напрямую (через ODBC если это реально SQL-сервер), а к тем что обрабатываются (чтобы получить курсор с отчётом, чтобы внести изменения в данные и т.п.) - через промежуточный слой - COM-сервер работающий на сервере (сорри за тафталогию - в смысле компьютере-сервере). Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 23:04 |
|
||
|
Привести тип или вернуть курсор клиенту с удаленного COM-сервера
|
|||
|---|---|---|---|
|
#18+
Hi...спасибо за ответ... Igor Korolyov Hi Dushes! Ты наткнулся на ограничение по длинне строки передаваемой через COM? Или ты всё-же опасаешься за производительность? Если второе, то забей - если тупой клиент захотел получить свои 100000 записей - пускай сидит и ждёт - следующий раз он сначала подумает головой, прежде чем такие условия отбора задавать (или НЕ задавать). Т.е. явно не ограничивай, но и "оптимизировать" эту заведомо "неправильную" ветку не стоит. P.S. Даже если ты передашь ссылку на XMLAdapter, или другой объект а не на "голый XML" - это никак не уменьшит объём прокачиваемых данных, а скорее даже увеличит. Объект через COM НЕ передаётся, просто создаётся особого рода "канал" (Proxy/Stub в случае "удалённого COM") по которому передаются "вызовы методов", параметры и возвращаемые значения. В общем всё это есть в специализированной литературе по COM... да это все понятно...на ATL это все достаточно просто реализуется, конечно, требуются определенные знания по маршаллингу и пр., в том числе как ты и сказал, написание заглушки и прокси...а стандартно, что я могу получить, это COleVariant, который в фоксе мы видим как Object...блин, как жаль, что проект изначально не на .net, тут бы проблемы с серилизацией и передачи объекта на сторону клиента не было бы...а вот сейчас приходится голову ломать или вообще придется отказаться от идеологии трехзвенки... P.P.S. Михаил Дроздов как-то рассказывал, что он "скрещивал" 3-х звенку с 2-х звенкой, т.е. к тем данным которые не нужно обрабатывать (тот-же справочник или список чего-то) он обращался напрямую (через ODBC если это реально SQL-сервер), а к тем что обрабатываются (чтобы получить курсор с отчётом, чтобы внести изменения в данные и т.п.) - через промежуточный слой - COM-сервер работающий на сервере (сорри за тафталогию - в смысле компьютере-сервере). Posted via ActualForum NNTP Server 1.1 ну разве что так...:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 13:31 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32897119&tid=1594872]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 450ms |

| 0 / 0 |
