Имя: Пароль:
1C
 
Столкнулся с WSDL на нестандартном порту.
0 Гений 1С
 
гуру
28.09.20
09:02
Web-сервис на не стандартном порту
Подскажите, если допустим, отредактирую WSDL-файл, есть возможность создать WS Определение из этого файла, а не из URL?
1 NorthWind
 
28.09.20
09:18
проще всего будет попробовать.
Вообще так делают, вот реальный кусок из wsdl тестового сервиса Меркурия

    <wsdl:service name="DictionaryServiceBindingQSService">
        <wsdl:port binding="tns:DictionaryServiceBinding" name="DictionaryServiceBindingQSPort">
            <soap:address location="https://api2.vetrf.ru:8002/platform/services/2.1/DictionaryService"/>;
        </wsdl:port>
    </wsdl:service>
2 NorthWind
 
28.09.20
09:20
ссылку задать как file://, например
3 Гений 1С
 
гуру
28.09.20
09:22
(2) Да, до меня тоже дошло через file, работает:

Определение = Новый WSОпределения("file://c:/tmp/ws_clientsexhange.xml", "Robot", "******");
4 Гений 1С
 
гуру
28.09.20
09:25
(1) да, спасибо, именно в Location добавил порт и все заработало. ;-)
5 Гений 1С
 
гуру
29.09.20
21:38
Кому надо, вот код:


Функция    ПодключитьсяКСервисуОбменаКонтрагентами() Экспорт
    СтруктураСервиса = Новый Структура("ОК, Ошибки", истина, ложь);
    
    Логин = Константы._СервисОбменаКонтрагентами_Логин.Получить();
    Пароль = Константы._СервисОбменаКонтрагентами_Пароль.Получить();;
    WSDLТекст = СокрЛП(Константы._СервисОбменаКонтрагентами_WSDLТекст.Получить());
    
    
    Попытка
        Если ЗначениеЗаполнено(WSDLТекст) Тогда
            //WSDL файл локальный, если нужно менять порты
            ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
            Адрес = ИмяВременногоФайла;
            Адрес = СтрЗаменить(Адрес, "\", "/");
            Адрес = "file://" + Адрес;
            Т = Новый ТекстовыйДокумент();
            Т.УстановитьТекст(WSDLТекст);
            Т.Записать(ИмяВременногоФайла);
        Иначе
            //Пример адреса: "http://127.0.0.1/buh/ws/ws_clientsexhange.1cws?wsdl";
            Адрес = Константы._СервисОбменаКонтрагентами_Адрес.Получить();
        КонецЕсли;
    
    
        Определение = Новый WSОпределения(Адрес, Логин, Пароль);
        
        ПространствоИмен = "http://www.fixinchik.ru/ClientsExchange";;
        Сервис = Новый WSПрокси(Определение,
        ПространствоИмен,
        "_ОбменКонтрагентами",
        "_ОбменКонтрагентамиSoap"
        );
        
        Сервис.Пользователь = Логин;
        Сервис.Пароль = Пароль;
        СтруктураСервиса.Вставить("Сервис", Сервис);
    Исключение
        СтруктураСервиса.ОК = ложь;
        СтруктураСервиса.Ошибки = ОписаниеОшибки();
    КонецПопытки;
    
    Возврат СтруктураСервиса;    
КонецФункции
6 lEvGl
 
гуру
29.09.20
23:04
что бы сразу не написать адрес?
"http://127.0.0.1:порт/buh/ws/ws_clientsexhange.1cws?wsdl";;
зачем эти пляски с константами и файлами
7 Гений 1С
 
гуру
30.09.20
07:58
(6) ну наверное потому, что так не работает (сразу), мой юный друг. Я пробовал. ;-)
8 lEvGl
 
гуру
30.09.20
08:50
(7) я тоже пробовал, нормально. может тебе не сразу надо?
9 trad
 
30.09.20
09:47
(7) а что не работает ты уже выяснил?
Просто то что ты творишь - это дикость.
10 Гений 1С
 
гуру
30.09.20
10:19
(8) (9) ну я же писал, что по адресу вида "http://127.0.0.1:порт/buh/ws/ws_clientsexhange.1cws?wsdl"; виден WDSL-файл, но сам веб-сервис не коннектится. Пролема именно в location. Решается только подменой location в файлах.
Порт 80 заменен на нестандартный.
11 trad
 
30.09.20
11:02
(10) Т.е. в location в wsdl указан один порт, а сам сервис на другом порту?
Я правильно понял?
Т.е. wsdl не соответствует сервису?

Ну тут два варианта: либо авторы сервиса поступают, мягко говоря, странно.
Либо ты пользуешься каким-то левым wsdl.
12 trad
 
30.09.20
11:03
И первый вариант я склонен считать наименее вероятным.
13 lEvGl
 
гуру
30.09.20
11:44
(10) странная история.. порт веб сервера не стандартный или еще какой то, не пойму? то есть при обращении к wsdl там неверные настройки указаны? может после смены порта не обновляли публикацию?
14 Гений 1С
 
гуру
30.09.20
15:43
(11) все там правильно, почитай ветку, на которую я ссылалюсь. HTTP на IIS работает не на 80-м порту. 1С при публикации естественно, никакой порт в Location не указывает, или я не знаю, где задать.
15 Гений 1С
 
гуру
30.09.20
15:47
(11) в локатион порт вообще не пишется, я не знаю, как настроить в 1С, чтобы она там порт указывала. Наверное, нет такой возможности.
16 trad
 
30.09.20
17:56
(15) В location порт пишется как часть url

Если веб-сервис выставляет 1С, и веб-сервис доступен по порту отличному от 80, например
http://xxx.yyy.zzz:88/appName/ws/wsName

то в wsdl по адресу http://xxx.yyy.zzz:88/appName/ws/wsName?wsdl
автоматически будет сгенерирован с таким location
location="http://xxx.yyy.zzz:88/appName/ws/wsName";
17 trad
 
30.09.20
17:58
и собственно любой клиент веб-сервиса обязан смотреть wsdl и стучаться по тому url который там указан
18 Гений 1С
 
гуру
01.10.20
15:44
(16) не будет. У меня там не :88, а обычный порт.
19 Гений 1С
 
гуру
01.10.20
15:45
т.е. если я захожу в http://xxx.yyy.zzz:88/appName/ws/wsName, то в location без :88
20 Гений 1С
 
гуру
01.10.20
15:45
Может надо как-то для этого IIS конфигурить, не знаю, у клиента бюджет не резиновый, я сделал ему по рабоче-фиксински.
21 trad
 
01.10.20
17:06
(19) значит проброс порта сделан. И это шляпа ленивого одмина
22 Гений 1С
 
гуру
02.10.20
08:46
(21) вот видишь, не все так просто... а ты не зная броду, начинаешь критиковать. ;-) Поучился бы лучше, как обходить препятствия.
23 trad
 
02.10.20
09:06
(22) все как раз просто
Чему тут учится? Гомнорешениям?
24 Гений 1С
 
гуру
02.10.20
09:31
(23) ну расскажи как бы ты решал, гуру. ;-) только не напрягая админа. слушаю.
25 trad
 
02.10.20
09:40
(24)
Варианты:
1. Напрячь админа
2. Сделать его работу самому
3. Скачать wsdl, поправить локейшн, исправленное залить в WS ссылку. А не это вот в (5)


И давай ка, генаша, без приказного порядка. Адью
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший