Создает прокси для обращения к внешнему Web-сервису.
Синтаксис
СоздатьWSПрокси(<URIПространстваИменСервиса>, <ИмяСервиса>, <ИмяПорта>, <ИнтернетПрокси>, <Таймаут>, <ЗащищенноеСоединение>, <Местоположение>, <ИспользоватьАутентификациюОС>)Примеры платформы
Прокси = WSСсылки.Заказы.СоздатьWSПрокси(
"http://orders.org", "orderService", "orderPort");Полное описание, параметры и ограничения
WSСсылкаМенеджер.<Имя WS-Ссылки>.СоздатьWSПрокси (WSReferenceManager.<WS-reference name>.CreateWSProxy)
WSСсылкаМенеджер.<Имя WS-Ссылки> (WSReferenceManager.<WS-reference name>)
СоздатьWSПрокси (CreateWSProxy)
Доступен, начиная с версии 8.1.
Синтаксис:
СоздатьWSПрокси(<URIПространстваИменСервиса>, <ИмяСервиса>, <ИмяПорта>, <ИнтернетПрокси>, <Таймаут>, <ЗащищенноеСоединение>, <Местоположение>, <ИспользоватьАутентификациюОС>)
Параметры:
<URIПространстваИменСервиса> (обязательный)
Тип: Строка.
URI пространства имен Web-сервиса.
<ИмяСервиса> (обязательный)
Тип: Строка.
Локальное имя Web-сервиса.
<ИмяПорта> (обязательный)
Тип: Строка.
Имя порта Web-сервиса.
<ИнтернетПрокси> (необязательный)
Тип: ИнтернетПрокси.
Используется для осуществления HTTP-соединения с веб-сервисом объектом WSПрокси.
Значение по умолчанию: Неопределено.
<Таймаут> (необязательный)
Тип: Число.
Определяет время ожидания соединения и операций, осуществляемых объектом WSПрокси, в секундах.
0 - не устанавливать таймаут.
Значение по умолчанию: 0.
<ЗащищенноеСоединение> (необязательный)
Тип: ЗащищенноеСоединениеOpenSSL, Неопределено.
Объект защищенного соединения для осуществления HTTPS соединения с веб-сервисом объектом WSПрокси.
Значение по умолчанию: Неопределено.
<Местоположение> (необязательный)
Тип: Строка.
Позволяет указать фактический адрес сервиса.
Если параметр не задан или задана пустая строка, то в качестве адреса сервиса используется значение свойства Местоположение.
Значение по умолчанию: Неопределено.
<ИспользоватьАутентификациюОС> (необязательный)
Тип: Булево.
Указывает на использование аутентификации NTLM или Negotiate на сервере.
Значение по умолчанию: Ложь.
Возвращаемое значение:
Тип: WSПрокси.
Описание:
Создает прокси для обращения к внешнему Web-сервису.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Если параметры заданы неправильно (не позволяют идентифицировать сервис и порт), то будет инициировано исключение.
Пример:
Прокси = WSСсылки.Заказы.СоздатьWSПрокси(
"http://orders.org", "orderService", "orderPort");
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Собрать два профиля WSПрокси, не вызывая веб-сервис
Сравним конструктор из WSОпределения и фабрику менеджера, проверим таймауты, типы транспорта и локальную установку ненастоящих учётных полей без вывода пароля.
Где и как запускать
Полный обычный клиентский общий модуль УчебныеКонтракты85, только толстый клиент. Пульт и локальный WSDL отдельными полными блоками ниже.
Подготовка
НОВАЯ собственная файловая база 8.5.1.1343 с именем конфигурации УчебныеКонтрактыМетаданных85, совместимость НеИспользовать, обычное приложение и толстый клиент. Можно использовать уже подготовленный собственный стенд уроков контрактов метаданных. Не рабочая база и не её копия; нет расширений, разделителей и других сеансов. Здесь runtimeVerifiedScenarios=0.
Общий модуль УчебныеКонтракты85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, остальные клиентские флаги=Нет, Привилегированный=Нет. Вставьте полный модуль одного выбранного урока. Обработка УчебныеКонтракты85 → обычная основная форма Пульт → кнопка Выполнить → действие ВыполнитьНажатие; полный модуль формы приведён отдельно.
Для всех трёх уроков: сохраните полный XML/WSDL из отдельного блока ниже в UTF-8. Создайте только свою WS-ссылку УчебныйСервис85 и импортируйте WSDL ИЗ ЛОКАЛЬНОГО ФАЙЛА, не по HTTP. StudyService85, namespace urn:guide:metadata85, StudyPort85 и Echo заданы в этом полном описании. Во втором уроке сравниваются файл и этот собственный импорт. Не нужны внешний источник, палитра или рабочие бизнес-данные.
WSDL содержит встроенную XSD без import/include, один сервис и порт, операцию Echo с входным сообщением и ответом. Адрес http://127.0.0.1:9/metadata-study-85 — учебная строка описания; этот урок не публикует по ней сервис и не проверяет, свободен ли порт. Никакая операция SOAP не вызывается.
Для второго урока человек сохраняет тот же XML строго как C:\1CStudy85\metadata-study-85.wsdl, UTF-8 без BOM. Допускаются LF/CRLF и завершающий перевод строки; иной текст код отклоняет ДО конструктора WSОпределения. Каталог и файл создайте сами только для своего опыта. Здесь файл на этом пути не создавался.
Свой файл не должен меняться между проверкой текста и конструктором; нет другого процесса, который его заменяет. Это одиночный учебный стенд, не защита от гонки или недоверенного WSDL. Не подставляйте внешние URL и не добавляйте импорты.
F7 и обновление только собственной базы. Первый урок выводит паспорт описания. Второй сравнивает своё локальное описание с импортированным. Третий создаёт два локальных объекта WSПрокси и проверяет настройки, НЕ вызывает Echo и не создаёт настоящую интеграцию.
Табличные документы создаются только в памяти и показываются readonly без имени файла. Не печатайте/не сохраняйте из окна. В третьем уроке логин и пароль — заведомо ненастоящие локальные строки; пароль не выводится. Рабочие учётные данные запрещены.
Процедура ВыполнитьПример() Экспорт
Определения = ПолучитьСвоиОпределения();
ИнтернетМаршрут = Новый ИнтернетПрокси(Ложь);
ИзОпределения = Новый WSПрокси(Определения, "urn:guide:metadata85", "StudyService85", "StudyPort85",
ИнтернетМаршрут, 20, Неопределено, "http://127.0.0.1:9/metadata-study-85", Ложь);
ИзМенеджера = WSСсылки.УчебныйСервис85.СоздатьWSПрокси("urn:guide:metadata85", "StudyService85", "StudyPort85",
ИнтернетМаршрут, 30, Неопределено, "http://127.0.0.1:9/metadata-study-85", Ложь);
Паспорт = СоздатьСвоюТаблицу();
ПроверитьСвойПрофиль(Паспорт, ИзОпределения, 20, "Из определения");
ПроверитьСвойПрофиль(Паспорт, ИзМенеджера, 30, "Из менеджера");
Если ИзОпределения.Пользователь <> "" Или ИзОпределения.Пароль <> "" Тогда
ВызватьИсключение "Нужен новый собственный объект без исходных учётных данных";
КонецЕсли;
Попытка
ИзОпределения.Пользователь = "guide-local-demo";
ИзОпределения.Пароль = "not-a-real-password";
Если ИзОпределения.Пользователь <> "guide-local-demo" Или ИзОпределения.Пароль <> "not-a-real-password" Тогда
ВызватьИсключение "Два изменяемых поля не подтвердили локальную установку";
КонецЕсли;
ДобавитьСтроку(Паспорт, "Из определения", "Dummy-логин проверен локально", Истина);
ДобавитьСтроку(Паспорт, "Из определения", "Dummy-пароль проверен без вывода", Истина);
Исключение
ИзОпределения.Пользователь = "";
ИзОпределения.Пароль = "";
ВызватьИсключение;
КонецПопытки;
ИзОпределения.Пользователь = "";
ИзОпределения.Пароль = "";
Если ИзОпределения.Пользователь <> "" Или ИзОпределения.Пароль <> "" Тогда
ВызватьИсключение "Возврат пустых локальных учётных полей не подтверждён";
КонецЕсли;
ПоказатьСвойПаспорт(Паспорт, "Два своих профиля WSПрокси, без вызова Echo и проверки сети");
КонецПроцедуры
Процедура ПроверитьСвойПрофиль(Паспорт, Клиент, ОжидаемыйТаймаут, Заголовок)
Если ТипЗнч(Клиент) <> Тип("WSПрокси") Или Клиент.Таймаут <> ОжидаемыйТаймаут
Или Клиент.ИспользоватьАутентификациюОС Или Клиент.ЗащищенноеСоединение <> Неопределено Тогда
ВызватьИсключение "Не совпали локальный тип, таймаут или выбранные флаги транспорта";
КонецЕсли;
Если ТипЗнч(Клиент.Прокси) <> Тип("ИнтернетПрокси") Или ТипЗнч(Клиент.ФабрикаXDTO) <> Тип("ФабрикаXDTO")
Или ТипЗнч(Клиент.Определение) <> Тип("WSОпределения") Тогда
ВызватьИсключение "Объекты транспорта, фабрики и WSDL нельзя путать между собой";
КонецЕсли;
Точка = Клиент.ТочкаПодключения;
Если ТипЗнч(Точка) <> Тип("WSТочкаПодключения") Или Точка.Имя <> "StudyPort85"
Или Точка.Местоположение <> "http://127.0.0.1:9/metadata-study-85" Тогда
ВызватьИсключение "Профиль связан не с собственным учебным портом";
КонецЕсли;
ДобавитьСтроку(Паспорт, Заголовок, "Таймаут в секундах", Клиент.Таймаут);
ДобавитьСтроку(Паспорт, Заголовок, "Аутентификация ОС", Клиент.ИспользоватьАутентификациюОС);
ДобавитьСтроку(Паспорт, Заголовок, "TLS-объект указан", Клиент.ЗащищенноеСоединение <> Неопределено);
ДобавитьСтроку(Паспорт, Заголовок, "Тип ИнтернетПрокси", ТипЗнч(Клиент.Прокси));
ДобавитьСтроку(Паспорт, Заголовок, "Тип ФабрикаXDTO", ТипЗнч(Клиент.ФабрикаXDTO));
ДобавитьСтроку(Паспорт, Заголовок, "Сервисов в определении", Клиент.Определение.Сервисы.Количество());
ДобавитьСтроку(Паспорт, Заголовок, "Порт без вызова", Точка.Имя);
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеКонтрактыМетаданных85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвоиОпределения()
ПроверитьСвойКонтекст();
Если Метаданные.WSСсылки.Найти("УчебныйСервис85") = Неопределено Тогда
ВызватьИсключение "Импортируйте свой приложенный локальный WSDL в УчебныйСервис85";
КонецЕсли;
МенеджерыСсылок = WSСсылки;
МенеджерСсылки = МенеджерыСсылок.УчебныйСервис85;
Определения = МенеджерСсылки.ПолучитьWSОпределения();
Если ТипЗнч(Определения) <> Тип("WSОпределения") Или Определения.Сервисы.Количество() <> 1 Тогда
ВызватьИсключение "Нужно собственное описание с одним сервисом";
КонецЕсли;
Сервис = Определения.Сервисы.Получить("urn:guide:metadata85", "StudyService85");
Если Сервис.Имя <> "StudyService85" Или Сервис.URIПространстваИмен <> "urn:guide:metadata85"
Или Сервис.ТочкиПодключения.Количество() <> 1 Тогда
ВызватьИсключение "Не совпал сервис своего локального WSDL";
КонецЕсли;
Точка = Сервис.ТочкиПодключения.Получить("StudyPort85");
Если Точка.Имя <> "StudyPort85" Или Точка.Местоположение <> "http://127.0.0.1:9/metadata-study-85" Тогда
ВызватьИсключение "Не совпали порт и учебный адрес; никаких вызовов не выполняем";
КонецЕсли;
Возврат Определения;
КонецФункции
Процедура ДобавитьСтроку(Таблица, Объект, Свойство, Значение)
СтрокаПаспорта = Таблица.Добавить();
СтрокаПаспорта.Объект = Объект;
СтрокаПаспорта.Свойство = Свойство;
СтрокаПаспорта.Значение = Строка(Значение);
КонецПроцедуры
Функция СоздатьСвоюТаблицу()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Объект");
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Возврат Таблица;
КонецФункции
Процедура ПоказатьСвойПаспорт(Таблица, Заголовок)
Если Таблица.Количество() = 0 Тогда
ВызватьИсключение "Собственный паспорт пуст";
КонецЕсли;
Документ = Новый ТабличныйДокумент;
Документ.Область("R1C1").Текст = "Объект";
Документ.Область("R1C2").Текст = "Свойство";
Документ.Область("R1C3").Текст = "Значение";
Номер = 2;
Для Каждого Запись Из Таблица Цикл
Документ.Область(Номер, 1).Текст = Запись.Объект;
Документ.Область(Номер, 2).Текст = Запись.Свойство;
Документ.Область(Номер, 3).Текст = Запись.Значение;
Номер = Номер + 1;
КонецЦикла;
Документ.Показать(Заголовок, "", Истина);
КонецПроцедурыУчебныеКонтракты85.Пульт
УчебныеКонтрактыМетаданных85 → Обработки → УчебныеКонтракты85 → Формы → Пульт → Модуль
Полный модуль своей обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеКонтракты85.ВыполнитьПример();
КонецПроцедурыmetadata-study-85.wsdl
Полный локальный UTF-8 XML/WSDL для своего импорта; для файлового урока C:\1CStudy85\metadata-study-85.wsdl.
Это XML, не BSL и не работающий сервис. Импорты и include отсутствуют.
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:guide:metadata85" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="urn:guide:metadata85" name="MetadataStudy85">
<types>
<xsd:schema targetNamespace="urn:guide:metadata85" elementFormDefault="qualified">
<xsd:element name="Echo"><xsd:complexType><xsd:sequence><xsd:element name="text" type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:element>
<xsd:element name="EchoResponse"><xsd:complexType><xsd:sequence><xsd:element name="text" type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:element>
</xsd:schema>
</types>
<message name="EchoRequest"><part name="parameters" element="tns:Echo"/></message>
<message name="EchoResponse"><part name="parameters" element="tns:EchoResponse"/></message>
<portType name="StudyPortType"><operation name="Echo"><input message="tns:EchoRequest"/><output message="tns:EchoResponse"/></operation></portType>
<binding name="StudyBinding" type="tns:StudyPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Echo"><soap:operation soapAction="urn:guide:metadata85:Echo"/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation>
</binding>
<service name="StudyService85"><port name="StudyPort85" binding="tns:StudyBinding"><soap:address location="http://127.0.0.1:9/metadata-study-85"/></port></service>
</definitions>
Разбор по шагам
Берём проверенное собственное определение и создаём ИнтернетПрокси(Ложь), чтобы не инициализировать его inetcfg.xml/настройками ОС. ИнтернетПрокси — транспортный маршрут, не SOAP-объект WSПрокси.
Новый WSПрокси принимает определение, namespace, имя сервиса и имя точки подключения, затем транспорт, таймаут 20, отсутствие TLS, свой адрес и Ложь для аутентификации ОС.
СоздатьWSПрокси менеджера не получает отдельный WSОпределения: менеджер использует свой импорт. Позиции необязательных параметров сдвинуты; таймаут выбран 30 секунд для сравнения двух профилей.
Таймаут, ИспользоватьАутентификациюОС, ЗащищенноеСоединение, Прокси, Определение, ТочкаПодключения и ФабрикаXDTO читаются. Таймаут readonly: его задаём при создании, не присваиваем свойству.
Профиль проверяет собственный StudyPort85, ожидаемый адрес и реальные классы WSОпределения/ФабрикаXDTO/ИнтернетПрокси. Он не проверяет доступность адреса или правильность аутентификации на сервере.
Только Пользователь и Пароль изменяемы. До опыта требуем пустые поля нового своего объекта, задаём известные ненастоящие строки, сравниваем локально и выводим лишь Булево подтверждения, не пароль.
Пустые исходные поля возвращаются после успеха и при ошибке локальной проверки. Это изменение объекта в памяти, не изменение аккаунта внешнего сервиса или сохранённого секрета.
Операция Echo нигде не вызывается. Наличие объекта WSПрокси — готовность локального профиля к отдельному будущему тесту, не успешный обмен. Поэтому пункт <Имя метода> этим уроком не закрывается.
Как проверить результат
Будущий паспорт показывает 20 и 30 секунд, аутентификацию ОС Ложь, отсутствие TLS-объекта и свои реальные классы фабрики/определения/маршрута. Здесь runtimeVerifiedScenarios=0.
StudyPort85 и его собственный адрес должны совпадать с приложенным WSDL; случайный другой endpoint вызывает отказ до учётного опыта.
Dummy-пользователь и dummy-пароль подтверждаются только локальным сравнением; пароль не попадает в паспорт или сообщение об ошибке. После опыта оба поля пусты.
Неверные namespace/имя сервиса/имя порта должны дать отказ создания по контракту менеджера. Не подменяйте ошибку пустым клиентом и не пробуйте рабочие учётные данные.
Изменение таймаута делается новым созданием, а не присваиванием readonly-свойству. Адрес не вызывается, успешной авторизации или SOAP-ответа в результате нет.
Ожидаемый результат
Подготовлен собственный локальный опыт без вызова операций веб-сервиса. Код и UI здесь не выполнялись: runtimeVerifiedScenarios=0.
На что обратить внимание
Описание WSDL и объект вызова WSПрокси — не результат работы внешней системы. Здесь Echo не вызывается и работоспособность сервиса не проверяется.
Имена сервисов выбираются парой namespace/локальное имя; URI namespace не является URL для сетевого запроса. Местоположение порта — адрес будущего вызова, а URLИсточника WS-ссылки — источник WSDL.
Все описания WS, коллекции и транспортные свойства, кроме логина/пароля WSПрокси, здесь только читаются. Коллекции описания не имеют выдуманных конструкторов, Добавить или Удалить.
Тип WS-параметра/ответа — описание XDTO, а не готовое передаваемое значение и не ОписаниеТипов 1С. ВозможноПустой/ВозможноПустое описывают допустимость Неопределено, не обязательное наличие такого значения.
Статическая проверка не является импортом WSDL, F7, реальным SOAP-тестом или подтверждением точного отображения document/literal параметров платформой.
Локальные ненастоящие строки не являются рекомендацией хранить реальные пароли в коде. Для настоящей интеграции потребуется отдельная безопасная схема получения секрета и разрешённый тест сервиса.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.