|
SOAP уже заSOAPила мне нервы | ☑ | ||
---|---|---|---|---|
0
abbas
30.06.15
✎
08:07
|
Доброго времени суток, есть у меня торговые агенты, ходят себе собирают данные, также есть сервер, обмен проходит удачно если данных не много, но как данные превышают какой то порог(какой не знаю) у меня приводит к зависанию сессии веб сервера, зависает все и на долго, передается у меня строка.
Помещал в хранилища, сжимал но толку нет, помогите как решить данную проблему??? |
|||
1
Лодырь
30.06.15
✎
08:11
|
(0) Определить размер при котором виснет и разбивать данные на порции.
|
|||
2
abbas
30.06.15
✎
08:25
|
(1) То есть отправлять по порциям, а это как?
Как я могу разделить строку и отправить? |
|||
3
Asmody
30.06.15
✎
08:48
|
(0) для начала попробовать другой веб-сервер.
|
|||
4
Asmody
30.06.15
✎
08:55
|
и IIS, и Apache имеют настройку, ограничивающую длину одного запроса. По-умолчанию там весьма скромные значения.
|
|||
5
abbas
30.06.15
✎
09:00
|
Я отправил строку, очень большая 8 мб, отправив ее, сервер получил ее, все 8 мб, но когда начинает считывать и записывать изменения, в этот момент она зависает...
(4) как изменить значения |
|||
6
Asmody
30.06.15
✎
09:43
|
(5) В IIS — через панель управления, в apache — в файлике httpd.conf (или apache.conf)
|
|||
7
Лефмихалыч
30.06.15
✎
09:44
|
(0) в любой непонятной ситуации смотри логи
|
|||
8
Александр_
Тверь 30.06.15
✎
09:47
|
(5) поставить значение по больше. 10 гигабайт например (ну т.е. максимум сколько позволит). Это позволит точно исключить влияние этого параметра.
У меня была проблема, работал с хранилищем конфигурации по HTTP и при некотором количестве изменений в конфе происходили ошибки, зависания и т.д. (т.е. при помещении этих изменений в конфу). Проблема оказалась именно в настройке максимальной длинны строки. |
|||
9
abbas
30.06.15
✎
09:51
|
Дело бы так, при отправлении изменений с клиента на сервер
я выводил сообщением строку с изменениями, сообщение вышло и я его скопировал в текстовой документ... .... Данные = Новый ХранилищеЗначения(Преобразование(ЗарегестрироватьВыгрузку()),Новый СжатиеДанных(9)); .... Функция ЗарегестрироватьВыгрузку() ЗаписьХМЛ = Новый ЗаписьXML; ЗаписьХМЛ.УстановитьСтроку(); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); Узел = ПланыОбмена.ОбменСЦентром.НайтиПоКоду("ЦБ"); ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ,Узел); ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел,ЗаписьСообщения.НомерСообщения); Пока ВыборкаИзменений.Следующий() Цикл ОбъектОбмена = ВыборкаИзменений.Получить(); ЗаписатьXML(ЗаписьХМЛ,ОбъектОбмена); КонецЦикла; ЗаписьСообщения.ЗакончитьЗапись(); Возврат ЗаписьХМЛ.Закрыть(); //это я поместил в сообщать() КонецФункции Далее на сервере, при получении данных с клиента изменения я сохранил изменения в файл (сравнив файлы они имели одинаковый размер и одинаковое содержимое, проверял по началам и концам строк, не одну строку а несколько), далее уже записывал изменения в базу. Войдя в функцию ПринятьИзменениеПоПлану(СтрокаСообщения), я откладчиком проходил цикл, один за другим один за другим он проходил и записывал изменения, но так как цикл обрабатывает оч много строк,я не стал ждать и решил за циклом(как цикл закрывался/заканчивается), поставил точку остановки, но он до точки не дошел и завис, завис в процедуре вебсервиса... Функция ВыполнитьОбмен(Данные) СохранитьДанныеВфайл(Данные.Получить()); Узел = ПринятьИзменениеПоПлану(Данные.Получить()); Данные2 = Новый ХранилищеЗначения(ЗарегестрироватьВыгрузку(Узел),Новый СжатиеДанных(9)); Возврат Данные2; КонецФункции Функция ПринятьИзменениеПоПлану(СтрокаСообщения) ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ); Узел = ЧтениеСообщения.Отправитель; ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML); Если Не Данные = Неопределено Тогда Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; Данные.ОбменДанными.Загрузка = Истина; Если ТипЗнч(Данные) = Тип("ДокументОбъект.ALG_Заявки") Тогда Данные.Товары.Загрузить(Документы.ALG_Заявки.НайтиПоНомеру(Данные.Номер).Товары.Выгрузить()); КонецЕсли; Данные.Записать(); КонецЕсли; КонецЦикла; ЧтениеСообщения.ЗакончитьЧтение(); Возврат Узел; КонецФункции |
|||
10
abbas
30.06.15
✎
10:17
|
зависание произошло именно в цикле "Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |