Прежде всего надо сократить до минимума такую возможность - запрашивать с сервера только то, что нам надо.
Если же такая необходимость возникла (например передать справочник товара 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....
Если есть вопросы, с готовностью отвечу.