Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Web-клиент и http-соединение. Как их подружить?

Web-клиент и http-соединение. Как их подружить?
Я
   Darchick
 
09.07.20 - 15:58
Добрый день!
Имею 2 базы. Путь будут пустые. У первой публикую веб-клиент, у второй http сервисы. Обе базы файловые, лежат на одном компе, апач на нем же, платформа 8.3.16.1148
Нужно, чтобы при входе в первую базу через браузер, пользователь нажимал кнопку и получал по http данные из второй базы.
(Ситуация смоделирована, задача, конечно, сложнее: нужно по http собрать инфу с 3 баз и выдать ее через веб-клиент пользователю в удобоваримом виде при запуске формы рабочего стола, но для простоты пусть будут две абсолютно пустые базы)

В первой базе общая обработка:

&НаКлиенте
Процедура Тест(Команда)
    ТестНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ТестНаСервере()
        Попытка
        Чтение = Новый ЧтениеJSON;
        СерверИсточник = "localhost";
        Адрес="/Start/hs/root/RR/";
        ПараметрыЗаписи=Новый ПараметрыЗаписиJSON;
        Запись=Новый ЗаписьJSON;
        Запись.УстановитьСтроку(ПараметрыЗаписи);
        Стр=Новый Структура("t","t");
        
        ЗаписатьJSON(Запись,Стр);
        Данные=Запись.Закрыть();
        HTTPЗапрос=Новый HTTPЗапрос(Адрес);
        HTTPЗапрос.УстановитьТелоИзСтроки(Данные);
        НТТР = Новый HTTPСоединение(СерверИсточник);
        НТТРОтвет=НТТР.ОтправитьДляОбработки(HTTPЗапрос);
        Ответ=Строка(НТТРОтвет.КодСостояния);
    исключение
        Ответ=ОписаниеОшибки();
    конецпопытки;
Сообщить(Ответ);
КонецПроцедуры

Http-сервис: имя публикации: Start, корневойURL root, ШаблонURL /RR/*, метод POST
Функция RRPOST(Запрос)
    Стр=Новый Структура("Ответ","1");
    ПараметрыЗаписи = новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,Истина);
    Запись=Новый ЗаписьJSON;
    Запись.УстановитьСтроку(ПараметрыЗаписи);
    

    ЗаписатьJSON(Запись,Стр);
    Данные=Запись.Закрыть();
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-type", "application/json;    charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(Данные);

    Возврат Ответ;
КонецФункции

Самый простой сервис, самое простое соединение. В тонком клиенте все выполняется. В веб клиенте спотыкается на строке:
НТТРОтвет=НТТР.ОтправитьДляОбработки(HTTPЗапрос);
И вываливается с ошибкой:
Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет:  Не могу установить соединение

НТТРОтвет=НТТРСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); дает ту же самую ошибку.
Может кто подскажет в какую сторону курить?
   asady
 
1 - 09.07.20 - 16:01
(0) Юзай
ВебКлиент = ПолучитьCOMОбъект("", "WinHttp.WinHttpRequest.5.1");
    
        ВебКлиент.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout);
        
        ВебКлиент.Open("POST", RequestURL, Ложь);
        ВебКлиент.SetRequestHeader("Content-Type", "application/json");
        ВебКлиент.SetRequestHeader("Accept", "application/json");
   sitex
 
2 - 09.07.20 - 16:03
(1) а если у него не Виндоус ? тогда приехали
   Garykom
 
3 - 09.07.20 - 16:06
>В веб клиенте спотыкается на строке:
>НТТРОтвет=НТТР.ОтправитьДляОбработки(HTTPЗапрос);
>И вываливается с ошибкой:

Хрень какая то оно же в &НаСервереБезКонтекста
   Darchick
 
4 - 09.07.20 - 16:10
(3) Так вот и я о том же. Оно же не на клиенте выполняется. Более того уже пыталась фигачить его в серверный общий модуль без вызова. Та же песня
   sitex
 
5 - 09.07.20 - 16:17
(4) А логи apache смотрел?
   Garykom
 
6 - 09.07.20 - 16:21
(0) Гм я надеюсь это разные базы?
Т.е. не из той же самой базы к себе запрос?

Короче поставь два апача на разных портах
   Darchick
 
7 - 09.07.20 - 16:24
(6) Апач один. А можно как-то указать в апаче или в 1с к какой базе по какому порту обращаться?
   Darchick
 
8 - 09.07.20 - 16:27
(5) логи на работе но примерно так: апач обращается к серверу первой базы и все. дальше не идет. Если это тонкий клиент, то обращение идет ко второй базе
   sitex
 
9 - 09.07.20 - 16:31
(7) Апач то можно настроить на разные порты, а вот 1С не пробовал.
   Darchick
 
10 - 09.07.20 - 16:56
(6) Большущее спасибо за наводку. Раскидала базы на 2 разные машины в одной сети и пошла жара. С нюансами еще надо поразбираться, но главное, что это принципиально может работать.
   Darchick
 
11 - 09.07.20 - 16:59
(1) Уже проходит и с НТТРСоединением и с WinHttp. Но мне понравилось, как WinHttp работает быстро. По сравнению с первым просто летает. Спасибо за хорошую мысль!

Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.