Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / web servis / 15 сообщений из 15, страница 1 из 1
07.07.2009, 16:24
    #36077965
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
вот вроде получился у меня web servis после подсказок
мой сервиc содержит функцию select, которая выбирает некоторые данные, кладет в xml возвращает клиенту,
клиент преобразует xmltocursor
все работает, но вот получилась выборка, которая преобразованая в xml превышает ограничение на размер строковой переменной и не удается её вернуть клиенту.
вычитал рекомендацию в в конце статьи делить возвращаемый поток.
сделал в сервисе 2 функции select и select_next. select нарабатывает курсор и передает первую порцию и не закрывает его, а select_next должна передавать следующие порции.
вызываю эти функции последовательно в одном и том же soap соединении
и выясняется что в select_next ни открыто не одной таблици, как будто бы на сервере создается каждый экземпляр класа не только для каждого коннекта, но для вызова каждого метода.
это действительно так?

как всетаки реализовать передачу больших потоков с сервиса?
...
Рейтинг: 0 / 0
07.07.2009, 23:51
    #36078758
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейО как всетаки реализовать передачу больших потоков с сервиса?
А сколько надо передать?
...
Рейтинг: 0 / 0
08.07.2009, 08:49
    #36078967
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
в данный момент я уперся в 50 мб, но вообще хочется не хуже чем фоксовское ограничение 2Гб
...
Рейтинг: 0 / 0
08.07.2009, 18:44
    #36080607
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейОв данный момент я уперся в 50 мб, но вообще хочется не хуже чем фоксовское ограничение 2Гб
Открою Вам секрет - для передачи таких объемов лучше всего использовать другие технологии и протоколы...

Но если Вы настаиваете - то создаете временную таблицу на сервере с одним лишним полем - передано на клиента (либо отдельная таблица если клиентов много с номером клиента , номером переданной записи, датой передачи). Далее клиент соединяется с Web Service, принимает, например 100 записей, передает на сервер номера принятых записей, сервер делает пометку и снова передает новых 100 записей...

Кажется, я уже где-то про это читал - да это будет replication на SQL Server :) Так что все можно написать без проблем на FoxPro, было бы желание... А за один раз передавать chunk в 2Gb просто не имеет смысла - "никакие сети" этого не выдержат...

Good luck!
...
Рейтинг: 0 / 0
11.07.2009, 14:59
    #36085482
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
Sergey ChОткрою Вам секрет - для передачи таких объемов лучше всего использовать другие технологии и протоколы...

подскажите пожалуйста, какие?
вообщем пытаюсь создать сервер приложений
самый первый вариант(все еще действующий) - файловый обмен через общий сетевой ресурс - низка надежность, да и по безопастности плохо.
еще пробовал winsocks - activeX не устроил по скорости
...
Рейтинг: 0 / 0
11.07.2009, 20:55
    #36085604
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейО вообщем пытаюсь создать сервер приложений...
А что он должен делать?
...
Рейтинг: 0 / 0
12.07.2009, 11:53
    #36085763
puls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейО,попробуй пережде чем отправить информции архивируй и у сервера разархивируй.Файлы dbf очень хорошо сжать можно,я сам так делаю.
...
Рейтинг: 0 / 0
13.07.2009, 08:40
    #36086143
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
Sergey ChА что он должен делать?
ну воощем мечтается об универсальном - выполнение любых обработок данных(размещенных в таблицах dbf или на MS SQL)- прикладной программист пишет какуюто процедуру, которая вызывается с клиента и исполняется на этом сервере приложений., в основном они возвращают какието данные клиенту, но могут только преобразовать исходные и вернуть только "удачу".
частный случай: "удаленный select" -именно с него я и начал.
...
Рейтинг: 0 / 0
13.07.2009, 08:48
    #36086146
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
pulsАлексейО,попробуй пережде чем отправить информции архивируй и у сервера разархивируй.Файлы dbf очень хорошо сжать можно,я сам так делаю.
ну если бы у меня была задача с очень медленной сетью и приемлимой мощностью на клиенте, то это был бы вариант, но не панацея: допустим нужно передать 200Мб (вроде не огромная цифра для фокса) жмем их (раз в 10 )получаем 20мб - и уже не проходит ограничение(выяснилось что оно 16Мб - размер строковой переменной фокса)
...
Рейтинг: 0 / 0
13.07.2009, 14:01
    #36086862
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейО,
такой вариант рассмотри:
создается расшаренная папка в сети, по тяжелому запросу сервер сохраняет ответ в файл с уникальным именем и возвращает имя файла клиенту. Клиент забирает файл и удаляет из папки.
Тут безопасность если и пострадает, то не сильно.

Иначе надо с сокетами разбираться и через свои TCP соединения слать, но там много подводных камней есть. Как-то на статью натыкался как ускорить передачу по TCP соединению, ссылку найти не смог.

Можешь еще в сторону "Named Pipe" покопать. Сам не пользовался, но как я понял это МСишная надстройка чтобы независеть от особенностей протокола используемого в сети. См. WinAPI функцию CreateNamedPipe() и все что с ней связано. Тут можно почитать
...
Рейтинг: 0 / 0
13.07.2009, 14:29
    #36086946
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
Dima Tрасшаренная папка в сети
Тут безопасность если и пострадает, то не сильно.
это действующий вариант. и безопастность и надежность очень страдают:
фокс очень критичен к надежности сети - поймал ошибку чтения и встал. иногда удается обработчиком ошибок поймать, но чаще всего нет. а безопастность просто ужас - по разным причинам клиент не удалил за собой - и вот тебе -"заходи кто хошь, бери что хошь".
Dima T
Иначе надо с сокетами разбираться и через свои TCP соединения слать, но там много подводных камней есть.
частично я разобрался и сделал на activeX winsocks - очень медленно работало
возможно на winapi было бы лучше, но решил поискать более свежие варианты
Dima TМожешь еще в сторону "Named Pipe" покопать. См. WinAPI функцию CreateNamedPipe() и все что с ней связано. Тут можно почитать
пожалуй посмотрю...
...
Рейтинг: 0 / 0
13.07.2009, 22:49
    #36087817
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейО[quot Sergey Ch] выполнение любых обработок данных(размещенных в таблицах dbf или на MS SQL.
Давайте не будем мешать два этих вида :)

MS SQL Server прекрасно работает и без Web Services, хотя с 9 версии в нем уже самом встроенная возможность создания оного на Windows 2003 и выше (хотя ws работет приблизительно в 3 раза медленне так как оборачивает данные в XML). Так что работа напрямую будет быстрее всего, чего Вы сможете создать самостоятельно... Через этот-же SQL Server можно работать и с данными FoxPro посредством Linked Server (все это будет быстрее чем через WS)...

Про ограничения 16Mb впервые слышу от Вас :) (просто надо соответствующие параметры изменить в Windows)...

Да, есть ограничения 2Gb как и везде... На практике в Intranet передавал файлы и в 1Gb...
...
Рейтинг: 0 / 0
14.07.2009, 09:42
    #36088185
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
Sergey ChПро ограничения 16Mb впервые слышу от Вас :) (просто надо соответствующие параметры изменить в Windows)...
ну вообщем так оказалось:
если я возвращаю только курсор
Код: plaintext
1.
2.
=CURSORTOXML("temp_select_cursor","str_cursor_xml", 1 , 1 , 0 ,"1")
return (str_cursor_xml)
вроде проблем не возникло.
а мне захотелось чуть сократить объем xml курсора и вложить в этот xml доп.инфу otvet_message
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
xml_return='<?xml version="1.0" encoding="ISO-8859-1" ?>'+CHR( 13 )+ ;
		'<WS>'+CHR( 13 )+ ;
		'	<Answer><![CDATA['+otvet_message+']]></Answer>'+CHR( 13 )
=CURSORTOXML("temp_select_cursor","str_cursor_xml", 3 )
xml_return= xml_return+'	<Cursor><![CDATA['+str_cursor_xml+']]></Cursor>'+CHR( 13 )
xml_return= xml_return+'</WS>'
return (xml_return)
то в строке
xml_return= xml_return+' <Cursor><![CDATA['+str_cursor_xml+']]></Cursor>'+CHR(13)
получаю ошибку "слишком длинная строка"

Sergey Ch, ваше мнение?
если не раcсматривать MS SQL, то какая из технологий предпочтительней для сервера приложений
WS, winsocks или "Named Pipe" ?
...
Рейтинг: 0 / 0
14.07.2009, 18:18
    #36089656
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
АлексейО Sergey Ch, ваше мнение?
если не раcсматривать MS SQL, то какая из технологий предпочтительней для сервера приложений
WS, winsocks или "Named Pipe" ?
Из указанного списка самым быстрым будет "Named Pipe".

Самым гибким "Web Services"...

Решать Вам...
...
Рейтинг: 0 / 0
14.07.2009, 22:42
    #36089984
B152
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web servis
Cамым быстрым будет передача по протоколу TCP/IP , файла как кучу. Быстрее только по NetBios.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / web servis / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]