Версия для печати темы (https://pro1c.org.ua/index.php?s=6b3ec55ede9aa8c46b1bf4ec766bceef&showtopic=51447)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Получить IP машины от Веб Сервиса

Автор: Gigi 09.04.19, 14:15

Привет всем!
Вопрос такой...
Дело в том, что то о чем тема это можно сделать разными путями.
Вот несколько способов которую вызывает тестовая функция:

 Функция Получить_IP() Экспорт
// ========= Способ 1
            //Возврат winmgmts_Получить_IP();
// ========== Способ 2
            Возврат IP_Получить_MACAddress();
// ========== Способ 3 == Определение ip через веб сервис
            //Возврат IP_ПолучитьОтВебСервиса();
КонецФункции

Способы 1/2: Хотя они почти одни и те же.
&НаКлиенте
Функция winmgmts_Получить_IP() Экспорт
//Определение ip адреса через "winmgmts"
COMОбъект = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2");    
Результат = COMОбъект.ExecQuery("SELECT * FROM
                                |Win32_NetworkAdapterConfiguration
                                |WHERE IPEnabled = TRUE");                
Для каждого Строка Из Результат Цикл
Для каждого ПодСтрока Из Строка.IPAddress  Цикл
Возврат ПодСтрока;
КонецЦикла;    
КонецЦикла;
КонецФункции

&НаКлиенте
Функция IP_Получить_MACAddress() Экспорт
ServicesSet = GetComObject("winmgmts:{impersonationLevel=impersonate}!\\" + СокрЛП(".") + "\root\cimv2");
Items = ServicesSet.ExecQuery("SELECT MACAddress FROM Win32_NetworkAdapter WHERE NetConnectionStatus=2");
Для каждого Item Из Items Цикл
    Если СокрЛП(Item["MACAddress"]) <> "" Тогда
        Mac = СокрЛП(Item["MACAddress"]);
        Прервать;
    КонецЕсли;
КонецЦикла;    
Items = ServicesSet.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress='" + Mac + "'");
Для Каждого objItem Из Items Цикл
    Если ТипЗнч(objItem.IPAddress) = Тип("COMSafeArray") Тогда
        Для Каждого Элем Из objItem.IPAddress Цикл
            IP = Элем;
            Прервать;
        КонецЦикла;
    КонецЕсли;
КонецЦикла;
Возврат IP;
КонецФункции

Ну таким маккаром можно, но одна проблема. Дело в том, что все это работает если 1С предприятие в режиме тонкий клиент.
Но если Веб клиент то выдает ошибку... говорит что терпеть не может COMОбъект.
А раз так то тогда вот третий способ:
&НаСервере
Функция IP_ПолучитьОтВебСервиса() Экспорт
Описание= Новый  WSОпределения("http://develplatform.ru/SynIP.asmx?wsdl");
Прокси = Новый WSПрокси(Описание, "http://www.develplatform.com/", "SynIP", "SynIPSoap");
Тип = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.develplatform.com/").Получить("GetClientIP");
ФабрикаВебСервис = Прокси.ФабрикаXDTO.Создать(Тип);
Возврат     Прокси.GetClientIP(ФабрикаВебСервис).GetClientIPResult;
КонецФункции

Который че то не срабатывает. и это на первой же линии. Пишет что не может найти сервис.
Я просто не сильно дружу с разными веб сервисными штучками ... не приходилось сталкиваться.
Поэтому кто нибудь не может побыстрому дать инфу почему нет соединения?
Может адрес сервиса не тот ... или в коде ошибка..
Буду признателен!

Автор: Petre 09.04.19, 14:44

Первые способы дают локальный айпи клиента.
Последний - внешний айпи сервера (и, видимо, пользователю сервера 1с доступ туда прикрыт).

Автор: Gigi 09.04.19, 14:55

Petre @ Сегодня, 14:44 * ,
Да ... думаю так...
Но ладно... тогда вопрос в другом стиле. Тем более что мне нужно получить не айпи сервера, а локальной машины.
и как говорил все работает и не нужно через веб сервис, но работает только для тонкого, а веб клиент сом-объект че то не терпит.
И та форма где есть вызов первой или второй функции вовсе не открывается и выдает ошибку.
Поэтому вопрос в том, как получить АйПи локальной машины клиента и так что бы это РАБОТАЛО И ДЛЯ ВЕБ-КЛИЕНТА.
Вот в чем вопрос.
Если не трудно... буду признателен!

Автор: Gigi 09.04.19, 16:22

Gigi @ Сегодня, 14:55 * ,
Ответа нет ... видимо с этим опять гем.
Короче ... в таком случае вынужден сделать так..

Функция Получить_IP() Экспорт
Попытка Возврат winmgmts_Получить_IP() Исключение Возврат Неопределено КонецПопытки;    
КонецФункции

И точка... т.е. для веб клиента придется отказаться от определения IP. Что бы под него записывать индивидуальные настройки тех пользователей которые через веб клиент.
Но ладно ... хрен с ним ... с этим еще париться...
Но в случае если будут предложение и разные выходы буду признателен!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua