Получить ответ от Web клиента на сервере

1. Vix 29 04.06.20 11:53 Сейчас в теме
Встала задача в передачи ответа на стороне веб клиента, на сторону сервера. На стороне оператора установлена служба, которая позволяет по адресу, например http://localhost:5107/Id, получить информацию которая привязана к ПО оператора, в виде JSON. Этот JSON необходимо передать на сервер, где проверяется этот Id и при положительном ответе, открывается форма авторизации на определенном ресурсе через 1С.
Пытался сделать через HTTP соединение и HTTP запросы, но их вызывать нельзя на стороне веб клиента, хотя в справке написано, доступно для веб клиента. Пробовал через виндовые комманды, но что бы к ним обратиться, создается COM объект, который так же не доступен на веб клиенте. Делать на стороне сервера я данный запрос не могу, т.к. тогда на сервере придется ставить службу, а это бессмысленно, т.к. привязка идет на уровне железа, на конкретную точку с которой работает оператор. Есть у кого какие мысли, как передать ответ с веб клиента на сервер?
По теме из базы знаний
Найденные решения
5. comptr 35 05.06.20 09:01 Сейчас в теме
Какая версия платформы?
На 8.3.14 HTTPЗапрос, HTTPСоединение: "Доступность: Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).". Не вижу веб клиента.
Можно перевести на тонкие клиенты?

Запрос к службе http://localhost:5107/Id может быть выполнен с другого компьютера в виде запроса к " http://IP_компа_в_сети:5107/Id" ? Если да, то получить IP НаКлиенте и передавать на сервер для запроса оттуда.

Можно попробовать разместить на форме поле HTML-документа и сделать запрос его средствами - JavaScript, AJAX. см https://infostart.ru/public/398366/ и подобное.
7. Vix 29 06.06.20 19:20 Сейчас в теме
Решил вопрос с веб клиентом через JavaScript, делюсь решением, как получить GET ответ в контексте веб клиента и передавать уже его на серверный контекст.
Формируем HTML документ, размещаем поле HTML документа на форме, скорее всего можно и программно его создать. В серверной процедуре создания прописываем

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)   	 
    GetJSON_Text = "<!DO CTYPE html>
		|<ht ml>
		|<head runat='server'>
		|<met a http-equiv='Content-Type' content='text/html; charset=utf-8'/>
		|    <title>'Пример JS' </title>
		|	<sc ript type='text/javascript'>
		|        document.addEventListener('DOMContentLoaded', function (event) {
		|            getHardware(url)
		|        });
		|        function Hard(url,H)
		|        {
		|            H = getHardware(url);
		|            console.log(H);
		|            return H;
		|        }
		|        function getHardware(url)
		|        {
		|            var xhr = new XMLHttpRequest();
		|            xhr.open(url, false);
		|            xhr.send();
		|            if (xhr.status != 200) {
		|                document.getElementById('HardForm').innerHTML = 'Служба не активна';
		|                return 404; //: 404: Not Found
		|            } else {
		|                // вывести результат
		|                document.getElementById('HardForm').innerHTML = xhr.responseText;
		|                return xhr.responseText; 
		|            }
		|        }
		|    </sc ript>
		|</head>
		|<body>
		|<button on click='Hard(url,'')'>Get Hardware</button>
		|    <fo rm id='HardForm' runat='server'>
		|    </form>
		|</body>
		|</html>";
  	ШаблонHTML = GetJSON_Text;
    ПолеHTML = ШаблонHTML;
КонецПроцедуры
Показать

на клиентской части вызываем любую функцию со следующим кодом

//------------------------------------url ="http://localhost:5107/Id"-----------------------------------//
&НаКлиенте
Функция GET_JS(url)
    ОкноДокумента = ЭтаФорма.Элементы.ПолеHTML.Документ.defaultView;
    Если ОкноДокумента = Неопределено Тогда
        Возврат "";
    КонецЕсли; 
    Результат = ОкноДокумента.Hard(url,"");
    Возврат Результат;
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex_bob 248 04.06.20 13:32 Сейчас в теме
Не понимаю, зачем такие сложности. Если это обработка, то через форму любое сериализуемое значение можно отправить на сервер.
4. Vix 29 04.06.20 15:23 Сейчас в теме
(2)эта обработка, которая до того как послать POST запрос авторизации, собирает так сказать данные о железе оператора, операторов N-количество, у всех разное железо, но все подключаются через web интерфейс к одному серверу с базой 1С, где развернут веб сервер. У каждого оператора установлена служба, которая позволяет обращаться по адресу http://localhost:5107/Id и получать JSON c параметрами железа. Так вот я не могу обратиться с веб клиента к этому http://localhost:5107/Id, т.к. требуется установить HTTP соединение, а оно на веб клиенте не доступно. Через Новый COMОбъект("MSXML2.XMLHTTP") хотел обратиться, что бы получить ответ, COM объекты так же не доступны. Решил службу сделать в 1С, используя WSH: GetComObject("winmgmts:{impersonationLevel=impersonate}!//" + TrimAll(ComputerName) + "/root/cimv2"), НО так же не доступно GetComObject на стороне веб клиента, а на стороне сервера я получу данные о железе сервера, а мне нужны данные о железе оператора и передавать их на сервер.
3. alex_bob 248 04.06.20 14:09 Сейчас в теме
Я наверно неправильно понял вопрос. Нужно ведь обратиться к стороннему сервису, верно? А через какие виндовые команды пробовали?
5. comptr 35 05.06.20 09:01 Сейчас в теме
Какая версия платформы?
На 8.3.14 HTTPЗапрос, HTTPСоединение: "Доступность: Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).". Не вижу веб клиента.
Можно перевести на тонкие клиенты?

Запрос к службе http://localhost:5107/Id может быть выполнен с другого компьютера в виде запроса к " http://IP_компа_в_сети:5107/Id" ? Если да, то получить IP НаКлиенте и передавать на сервер для запроса оттуда.

Можно попробовать разместить на форме поле HTML-документа и сделать запрос его средствами - JavaScript, AJAX. см https://infostart.ru/public/398366/ и подобное.
6. Vix 29 05.06.20 10:59 Сейчас в теме
(5)Платформа 8.3.15, да HTTP соединение там уже убрали со справки, осталось только COM-соединение доступное на веб клиенте. Через IP не выйдет т.к. этот адрес доступен только после установки службы и подписания ее, на сервере ее ставить нельзя, да и IP опять же передать на сервер, не вызывая COM, пока ни знаю. На счет JavaScript, AJAX, спасибо, порою в этом направлении. Хотя я начал копать пока в направлении, размещении на форме HTTP документа, авто открытия http://localhost:5107/Id , распарсить и получить нужный мне JSON. Наверное это единственные 2 способа, которые пока осталось проверить.
7. Vix 29 06.06.20 19:20 Сейчас в теме
Решил вопрос с веб клиентом через JavaScript, делюсь решением, как получить GET ответ в контексте веб клиента и передавать уже его на серверный контекст.
Формируем HTML документ, размещаем поле HTML документа на форме, скорее всего можно и программно его создать. В серверной процедуре создания прописываем

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)   	 
    GetJSON_Text = "<!DO CTYPE html>
		|<ht ml>
		|<head runat='server'>
		|<met a http-equiv='Content-Type' content='text/html; charset=utf-8'/>
		|    <title>'Пример JS' </title>
		|	<sc ript type='text/javascript'>
		|        document.addEventListener('DOMContentLoaded', function (event) {
		|            getHardware(url)
		|        });
		|        function Hard(url,H)
		|        {
		|            H = getHardware(url);
		|            console.log(H);
		|            return H;
		|        }
		|        function getHardware(url)
		|        {
		|            var xhr = new XMLHttpRequest();
		|            xhr.open(url, false);
		|            xhr.send();
		|            if (xhr.status != 200) {
		|                document.getElementById('HardForm').innerHTML = 'Служба не активна';
		|                return 404; //: 404: Not Found
		|            } else {
		|                // вывести результат
		|                document.getElementById('HardForm').innerHTML = xhr.responseText;
		|                return xhr.responseText; 
		|            }
		|        }
		|    </sc ript>
		|</head>
		|<body>
		|<button on click='Hard(url,'')'>Get Hardware</button>
		|    <fo rm id='HardForm' runat='server'>
		|    </form>
		|</body>
		|</html>";
  	ШаблонHTML = GetJSON_Text;
    ПолеHTML = ШаблонHTML;
КонецПроцедуры
Показать

на клиентской части вызываем любую функцию со следующим кодом

//------------------------------------url ="http://localhost:5107/Id"-----------------------------------//
&НаКлиенте
Функция GET_JS(url)
    ОкноДокумента = ЭтаФорма.Элементы.ПолеHTML.Документ.defaultView;
    Если ОкноДокумента = Неопределено Тогда
        Возврат "";
    КонецЕсли; 
    Результат = ОкноДокумента.Hard(url,"");
    Возврат Результат;
КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот