|
Нет соединения с локальным сервером Apache | ☑ | ||
---|---|---|---|---|
0
nsergn
27.12.23
✎
11:43
|
1) Работающий вариант
Есть база-источник (самописная) с Apache-сервером и есть база-приемник (серверная, Бухгалтерия) Обработка в Бухгалтерии получает данные с базы-источника c указанного ip. 2) Неработающий вариант База-источник скопирована на локальный компьютер, установлен Apache, произведена публикация на веб-сервере, через браузер по localhost и имени публикации вход в базу происходит на локальном компьютере и есть та же база-приемник (серверная, Бухгалтерия) из первого варианта с той же обработкой. Но при изменении ip-адреса удаленного компьютера на localhost сообщение: "Во время выполнения действия была потеряна связь с сервером" Почему не работает? Что я упустил? |
|||
1
Builder
27.12.23
✎
11:45
|
(0) Ничего не понял, но зачем менять IP и вообще где-либо использовать localhost? Это же только СВОЙ компьютер.
|
|||
2
nsergn
27.12.23
✎
11:48
|
(1) Для изменения обработки, получающей данные из базы-источника (обработка пока работает) и не сломана) надо потестировать на копии некоторые изменения.
|
|||
3
nsergn
27.12.23
✎
11:53
|
+(2) потом в базе-источнике изменить отдаваемые данные, дополнить
|
|||
4
Builder
27.12.23
✎
12:13
|
(3) Что мешает прописать реальный IP компа и не страдать фигней?
|
|||
5
nsergn
27.12.23
✎
12:26
|
(3) я пробовал вместо localhost написать только 127.0.0.1
А такая простая мысль, как Вы озыучиили, лежащая на поверхности, и не пришла мне в голову ) Сейчас попробую. |
|||
6
nsergn
27.12.23
✎
12:29
|
(4) попробовал написать реальный адрес 10.1....
В ответ - ошибка "Непредвиденный символ при чтении JSON" |
|||
7
nsergn
27.12.23
✎
12:31
|
Ошибка при вызове метода контекста (ПрочитатьJSON)
{ВнешняяОбработка.ДокументыЗачисленияПоHttp.Форма.Форма.Форма(26)}:Структура = ПрочитатьJSON(ЧтениеJSON, Ложь, "Дата", ФорматДатыJSON.ISO);//, "ФункцияВосстановленияЧтения", Объект); |
|||
8
nsergn
27.12.23
✎
12:38
|
Мой косяк, ошибка другая:
"Недопустимое состояние потока записи JSON" |
|||
9
nsergn
27.12.23
✎
12:39
|
Ошибка при вызове метода контекста (ПрочитатьJSON)
{ВнешняяОбработка.ДокументыЗачисленияПоHttp.Форма.Форма.Форма(27)}:Структура = ПрочитатьJSON(ЧтениеJSON, Ложь, "Дата", ФорматДатыJSON.ISO);//, "ФункцияВосстановленияЧтения", Объект); |
|||
10
nsergn
27.12.23
✎
12:50
|
код состояния 401
|
|||
11
nsergn
27.12.23
✎
12:57
|
(10) может с пользователем связано?
В базе-приемнике, откуда выполняется обработка(запрос), имя пользователя ИвановИИ, а в базе-источнике такого пользователя нет |
|||
12
nsergn
27.12.23
✎
14:11
|
Создание пользователя с таким же именем и паролем в базе-источнике ни к чему не привели, ошибка та же -
"код состояния 401" |
|||
13
abask
30.12.23
✎
16:00
|
опишите подробнее схему взаимодействия. как данные забираются
ws, hs, что-то другое? |
|||
14
nsergn
09.01.24
✎
13:47
|
(13) hs
В базе-источнике есть HTTP-сервис getdocuments -работающий, если к работающей базе-источнику подключаться из БГУ на сервере, то соединение проходит и ответ обработка получает. Как только база-источник копируется на локальный компьютер, там создается веб-сервис, база становится в браузере доступна, но данные уже не получаются. В базе Бухгалтерии (приемник) выполняется код: Соединение = Новый HTTPСоединение(Объект.АдресСервиса); HTTPЗапрос = Новый HTTPЗапрос("/xxxx/hs/getdocuments/?from="+Формат(Объект.Период.ДатаНачала,"ДФ=yyyy-MM-dd")+"&to="+Формат(Объект.Период.ДатаОкончания,"ДФ=yyyy-MM-dd")); где xxxx - имя веб публикации базы. Уже и перенес ее в папку без русских букв в названии и повторно опубликовал. Адрес если ставить localhost или 127.0.0.1, то связь отсутствует. Если прописать реальный IP компьютера - "Код состояния 401" |
|||
15
Donkey_hot
09.01.24
✎
15:35
|
(14) 401 - это, как правило, ошибка авторизации. Попробуйте обратиться к каждой из публикаций через браузер. Вероятно, на живой у вас пароль не спросит, а на тестовой будет выведен браузерный диалог авторизации. Если поведение такое, то сравните файлы default.vrd в рабочем и нерабочем вариантах. Скорее всего, в рабочем вручную прописан юзер.
|
|||
16
nsergn
09.01.24
✎
16:39
|
(15) действительно, через браузер в тестовой спрашивает логин-пароль.
В живой базе в default.vrd прописан пользователь и пароль. Прописал в тестовой. Теперь через браузер пароль не спрашивает, но ответ в браузере такой: "{HTTPСервис.getdocuments.Модуль(13)}: Ошибка при вызове метода контекста (XMLЗначение)" Что-то дальше надо настроить? |
|||
17
nsergn
09.01.24
✎
17:15
|
в строке 13 такой код:
НачДата = XMLЗначение(Тип("Дата"),НачДата); |
|||
18
Donkey_hot
09.01.24
✎
18:05
|
(17) Ну теперь Вы уже точно внутри, проще всего поставить точку останова и сделать вызов (не забыв подключить отладку http-сервисов). Параметры from, to точно в требуемом (yyyy-MM-dd) формате задали?
|
|||
19
nsergn
10.01.24
✎
13:54
|
(18) На серверной базе во внешней обработке нельзя же включить точки останова?
|
|||
20
nsergn
10.01.24
✎
13:59
|
(18) Как в (14) указано, так и осталось. Я вообще код еще нигде не менял. Только перенес базу-источник на локальный компьютер, сделал веб-публикацию и запустил внешнюю обработку в базе-приемнике.
Когда источник берется оригинальный (указывается его ip-арес), то эта обработка работает. |
|||
21
nsergn
10.01.24
✎
14:06
|
на работающей базе-источнике default.vrd лежит в папке с базой в подпапке web, а у меня в C:\Apache24\htdocs\
И путь к базе другой, не как у меня. Может тоже надо такие же пути сделать и базу заново опубликовать? |
|||
22
Donkey_hot
10.01.24
✎
15:39
|
(21) Если вы получили сообщение из (16), значит вопросы авторизации благополучно решены. Сделайте скрин адресной строки браузера, как вызываете?
|
|||
23
nsergn
10.01.24
✎
16:34
|
(22) http://10.1.X.XX/idpo/hs/getdocuments?wsdl
(где ХХ- цифры адреса моего компьютера, где лежит база-источник и стоит Apache с опубликованной базой). Также пробовал написать http://localhost/XXXX/hs/getdocuments (XXXX-имя веб публикации) Результат в обоих случаях одинаковый: "{HTTPСервис.getdocuments.Модуль(13)}: Ошибка при вызове метода контекста (XMLЗначение)" В строке 13 такой код: НачДата = XMLЗначение(Тип("Дата"),НачДата); Наверное, такой запрос без даты и возвращает такой ответ. Обработка посылает запрос с датой, которая берется из поля на форме, я ничего не менял еще, в реальной базе-источнике код такой же и он работает. |
|||
24
Donkey_hot
10.01.24
✎
18:07
|
(23) У Вас смешались веб-сервисы и http-сервисы. WSDL-описание характерно для первых. В Вашем же случае надо написать типа:
http://10.1.x.xx/idpo/hs/getdocuments?from=2024-01-01&to=2024-01-10 ну там даты подберите, чтобы в диапазоне какие-то документы были. |
|||
25
nsergn
11.01.24
✎
10:40
|
(24) Спасибо, заработало!!!
Ответ вначале пришел с сообщением об ошибке - оказывается я уже внес изменение в обработку всего одну строчку и забыл про нее. В выдаваемом ответе была ссылка на ошибку в этой строке. Закомментировал строку и все заработало. Теперь надо придумать как эту строку внести обратно, только правильно. В ответ надо вставить два поля из табличной части документа - номер договора и дата договора. Вначале пишу номер договора: МассивТабличнойЧасти = Новый Массив; Пока ВыборкаНомерСтроки.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаНомерСтроки.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СтруктураТЧ = Новый Структура(); //тут далее много полей идет... СтруктураТЧ.Вставить("СлушательТелефон", СокрЛП(ВыборкаДетальныеЗаписи.СлушательТелефон)); //--- а это НомерДоговора - единственое поле, которое вставил и на нем вылетает с ошибкой: СтруктураТЧ.Вставить("СлушательНомерДоговора", СокрЛП(ВыборкаДетальныеЗаписи.СлушательНомерДоговора)); //--- МассивТабличнойЧасти.Добавить(СтруктураТЧ); КонецЦикла; КонецЦикла; Структура.Вставить("ТабличнаяЧасть", МассивТабличнойЧасти); МассивДокументов.Добавить(Структура); КонецЦикла; |
|||
26
nsergn
11.01.24
✎
10:42
|
перед этим есть текст запроса, в котором выбирается в том числе и номер договора
|
|||
27
Donkey_hot
11.01.24
✎
11:28
|
(26) Ну Вы хотя бы текст ошибки приведите... А в идеале еще и текст запроса.
|
|||
28
nsergn
11.01.24
✎
17:31
|
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ | ЗачислениеНаЦиклСлушатели.Ссылка КАК Ссылка, | ЗачислениеНаЦиклСлушатели.Ссылка.Номер, | ЗачислениеНаЦиклСлушатели.Ссылка.Дата, | ЗачислениеНаЦиклСлушатели.Ссылка.ПометкаУдаления, | ЗачислениеНаЦиклСлушатели.Ссылка.Проведен, | ЗачислениеНаЦиклСлушатели.НомерДоговора, | ЗачислениеНаЦиклСлушатели.ДатаДоговора //это часть запроса |ИЗ | Документ.ЗачислениеНаЦикл.Слушатели КАК ЗачислениеНаЦиклСлушатели |ГДЕ | ЗачислениеНаЦиклСлушатели.Ссылка.ДатаНачала МЕЖДУ &НачДата И &КонДата | |СГРУППИРОВАТЬ ПО | ЗачислениеНаЦиклСлушатели.НомерСтроки, | ЗачислениеНаЦиклСлушатели.Ссылка.Номер, | ЗачислениеНаЦиклСлушатели.Ссылка.Дата, | ЗачислениеНаЦиклСлушатели.Ссылка.ПометкаУдаления, | ЗачислениеНаЦиклСлушатели.Ссылка.Проведен, | ЗачислениеНаЦиклСлушатели.НомерДоговора, | ЗачислениеНаЦиклСлушатели.ДатаДоговора |ИТОГИ ПО | Ссылка, | НомерСтроки"; |
|||
29
Donkey_hot
11.01.24
✎
17:43
|
(28) Очевидно, у Вас в выборке нет поля СлушательНомерДоговора.
Правильно будет СтруктураТЧ.Вставить("СлушательНомерДоговора", СокрЛП(ВыборкаДетальныеЗаписи.НомерДоговора)); |
|||
30
nsergn
11.01.24
✎
17:46
|
(27) а текст ошибки отсутствует )
я что-то наверное изменил, отвлекся на другое и теперь не помню что именно Но в таблицу в обработке не попадает НомерДоговора. Завтра надо внимательно глянуть для начала, сейчас не соображаю ) Напишу завтра |
|||
31
nsergn
11.01.24
✎
17:51
|
(29) и спасибо Вам большое, что помогаете
|
|||
32
nsergn
12.01.24
✎
12:40
|
(29) с НомерДоговора получилось, оказывается в запросе неправильно было написано
ЗачислениеНаЦиклСлушатели.НомерДоговора а надо: ЗачислениеНаЦиклСлушатели.НомерДоговора КАК НомерДоговораТабличнаяЧасть так заработало, в ответ в браузере выдаются теперь Номера договоров из табличной части документа |
|||
33
nsergn
12.01.24
✎
12:41
|
(29) А вот с ДатаДоговора это не сработало почему-то, хотя это соседнее поле с НомерДоговора
|
|||
34
nsergn
12.01.24
✎
13:31
|
ЗачислениеНаЦиклСлушатели.НомерДоговора
- а теперь и так работает. Вообще не понятно, почему заработало ) |
|||
35
Мимохожий Однако
12.01.24
✎
13:55
|
Квест 1С в действии
|
|||
36
nsergn
12.01.24
✎
15:13
|
(35) Ага, теперь еще и ДатаДоговора выбираться стали - тоже непонятно, что случилось )
Теперь новый квест - Не выводится в нужном формате дата: В коде: Структура.Вставить("ДатаДоговора", Формат(ВыборкаСсылка.ДатаДоговора,"ДФ='yyyy-MM-dd'")); Выдает : "28.03.2023 0:00:00" |
|||
37
nsergn
12.01.24
✎
15:15
|
(36) не в той строке смотрю )
|
|||
38
nsergn
12.01.24
✎
15:27
|
В итоге всё получилось, ради чего тема создавалась. )
Спасибо всем, кто направлял ) 29Donkey_hot и 1Builder - спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |