Прежде всего надо сократить до минимума такую возможность - запрашивать с сервера только то, что нам надо.
Если же такая необходимость возникла (например передать справочник товара 50000 записей на удаленный компьютер) следует применить некоторые хитрости.
1. Вместо формата XML использовать CVS
В FoxPro есть прекрасная команда
m.lctxtfile=lcsettmppath+m.lctable+'.TXT'
COPY TO (m.lctxtfile) DELIMITED WITH { WITH CHARACTER '}'
(в ней в качестве разделителей надо указать знак, не применяемый в Вашей фирме - я нашел, что '}' как правило не применяется в справочнике товаров)
Далее я создаю таблицу всего с одной записью и вставляю туда полученный файл:
m.lctable2=SYS(2015)
m.lctablef2=lcsettmppath+m.lctable2+'.DBF'
m.lctablef3=lcsettmppath+m.lctable2+'.FPT'
CREATE TABLE (m.lctablef2) (SPECIAL C(2), body M)
APPEND BLANK
REPLACE SPECIAL WITH '{}'
APPEND MEMO body FROM (UPPER(m.lctxtfile)) OVERWRITE
DELETE FILE &lctablefn
DELETE FILE &lctxtfile
CURSORTOXML(lctable2,"lcXMLa11",1,1,0,"1")
USE IN &lctable2
DELETE FILE &lctablef2
DELETE FILE &lctablef3
Вот этот XML файл уже передается назад клиенту.
Что мы выигрываем?
- длина передаваемого файла значительно меньше
- не тратится время на принимаемой машине на очень долгую операцию получения CURSOR из XML file (иногда даже машина не выполняет такую долгую операцию)
Недостаток:
- жесткая структура передаваемого и принимаемого файла
2. Аналогичен и второй вариант, но в этом случае мы упаковываем архиватором непосредственно тот файл, который мы будем передавать.
Преимущество - сжатие файла приблизительно в 3-4 раза по сравнению с CVS. Недостаток - внешний архиватор.
Код по данному примеру не привожу, так как я не использую данный метод по причине внешнего архиватора - иногда могут быть проблемы при запуске его из Web Servicse....
Если есть вопросы, с готовностью отвечу.