Имя: Пароль:
1C
1С v8
Web-клиент и http-соединение. Как их подружить?
0 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Запрос); дает ту же самую ошибку.
Может кто подскажет в какую сторону курить?
1 asady
 
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");
2 sitex
 
naïve
09.07.20
16:03
(1) а если у него не Виндоус ? тогда приехали
3 Garykom
 
гуру
09.07.20
16:06
>В веб клиенте спотыкается на строке:
>НТТРОтвет=НТТР.ОтправитьДляОбработки(HTTPЗапрос);
>И вываливается с ошибкой:

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

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