Ошибка вызова операции сервиса getwsdl

Я
   Адимр

22.10.12 — 16:59

Простой пример возвращает строку. Опубликовал. iis 5.1, 1c 8.2. управляемая форма открывается в браузере.

обращаюсь так localhost/ws/WS1.1cws/?wsdl

Пишет: Файл не найден.

   Defender aka LINN

1 — 22.10.12 — 16:59

Продолжайте наблюдения

   Адимр

2 — 22.10.12 — 17:01

(1) Можете больше не писать в этой теме, ваш iq установлен а  помощь не требуется.

   Balonbl4

3 — 22.10.12 — 17:03

localhost/ws/WS1.1cws/?wsdl  — слеш лишний,нужно так: localhost/ws/WS1.1cws?wsdl

   Wobland

4 — 22.10.12 — 17:03

(2) скока?

   Адимр

5 — 22.10.12 — 17:07

(3) То же самое. А где вообще этот файл должен находится?

   Адимр

6 — 22.10.12 — 17:08

(4) Сказал бы, но ты до таких цифр считать не умеешь.

   Wobland

7 — 22.10.12 — 17:09

(6) откуда информация?

   YHVVH

8 — 22.10.12 — 17:10

(0) а базу опубликовал?

   YHVVH

9 — 22.10.12 — 17:11

имякомпютера/имяпубликации/ws/имяфайла публикации?wsdl

   Адимр

10 — 22.10.12 — 17:12

(8) Базу да опубликовал, и захожу успешно в неё.

   YHVVH

11 — 22.10.12 — 17:12

(5) нетю там файла и не должно быть

   YHVVH

12 — 22.10.12 — 17:12

(10) попробуй (9)

   YHVVH

13 — 22.10.12 — 17:14

надо к пути по которому заходишь успешно , добавить

/ws/имяфайла публикации?wsdl

   Адимр

14 — 22.10.12 — 17:15

(9) Имя публикации базы? http://localhost/InfoBaseWebService/ws/WS1.1cws?wsdl

Так уже лучше «Сбой при удаленном вызове процедуры.» :)

   Адимр

15 — 22.10.12 — 17:16

Попробую на другом компе.

   YHVVH

16 — 22.10.12 — 17:16

(14) надо в пути до базы прописать еще пользователя и пароль в файле публикации

   YHVVH

17 — 22.10.12 — 17:17

прав вообщем нет на вызов процедуры, или процедуры нет

   Адимр

18 — 22.10.12 — 17:37

Попробовал на другом компе

Сначала выдавал это

— <soap:Envelope   <faultstring>Ошибка вызова операции сервиса: {http://vm-1c-doc-tst}:DemoWeb:getWSDL() по причине: Ошибка при выполнении файловой операции ‘C:Documents and SettingsDefault UserLocal SettingsApplication Data1C'</faultstring>

Не было папки такой создал дал права 1с туда скидывает дампы ошибок.

   Адимр

19 — 22.10.12 — 17:49

(16) Пользователя нет.

   UnAmerican

20 — 22.10.12 — 17:52

(19) А должен быть.

   Адимр

21 — 22.10.12 — 18:25

(20) Пользователя базы данных я имею ввиду.

   Адимр

22 — 22.10.12 — 19:06

А web сервис что должен вернуть вот такую кучу малу

 <?xml version=»1.0″ encoding=»UTF-8″ ?>

— <definitions xmlns=»http://schemas.xmlsoap.org/wsdl/» xmlns:soap12bind=»http://schemas.xmlsoap.org/wsdl/soap12/» xmlns:soapbind=»http://schemas.xmlsoap.org/wsdl/soap/» xmlns:tns=»http://www.sample-package.org» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsd1=»http://www.sample-package.org» name=»ЗдоровенькиБулы» targetNamespace=»http://www.sample-package.org»>

— <types>

— <xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xs1=»http://www.sample-package.org» targetNamespace=»http://www.sample-package.org» elementFormDefault=»qualified»>

— <xs:element name=»ПриветХлопцы»>

— <xs:complexType>

 <xs:sequence />

 </xs:complexType>

 </xs:element>

— <xs:element name=»ПриветХлопцыResponse»>

— <xs:complexType>

— <xs:sequence>

 <xs:element name=»return» type=»xs:string» />

 </xs:sequence>

 </xs:complexType>

 </xs:element>

 </xs:schema>

 </types>

далее еще куча тегов.

  

Адимр

23 — 22.10.12 — 19:08

еще вопрос один web сервис заработал возвращает см выше

а второй идентичный по сути нет пишет

Ошибка работы с Интернет:  Server returned nothing (no headers, no data)

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Веб-сервисы и 1С: «Здравствуй, Name», время-деньги и «Жизнь»

«Вся наша жизнь — игра…» ( У. Шекспир)

«Что наша жизнь? Игра…» (А. Пушкин)

Часть вводная.

При разработке приложений с глобальным взаимодействием уже давно известна архитектура SOA (Service Oriented Architecture).

Такая архитектура подразумевает, что приложения на разных платформах, в разных средах взаимодействуют между собой, при этом разработчик может не беспокоиться о том, что находится внутри приложений на той стороне (т.е. об их реализации) , а также о том, что находится снаружи их (т.е. об их среде окружения).

Существует достаточно большое количество реализации этой архитектуры. Одним из видов такой реализации является технология основанная на связке специфицированных консорциумом w3c таких технологий, как веб-сервисы и протоколы SOAP, WSDL, WADL и т.п., которые в свою очередь основаны на XML. Уже достаточно длительное время эта технология интегрирована в платформу 1с Предприятие. Благодаря этому 1с предприятие может служить «сервером приложений», поставщиком сервисов, можно организовать взаимодействие между 1с, и приложениями, написанными на других платформах, можно организовать взаимодействие между различными системами на базе 1с и так далее.

Существует достаточно большое количество полезных web-сервисов, например: получение курсов валют, службы отправки почтовых сообщений и SMS на основе

web-сервисов и WSDL, каковую архитектуру используют туристические агентства, гостиницы, ритейлеры и т.п.

Часть 1. Здравствуй, Name!

Есть достаточное количество противников SOA и сторонников других технологий, как и тех, кто недолюбливает 1С. Однако существующая технология разработки на платформе 1с позволяет приступить к разработке и получить готовый результат довольно быстро при весьма поверхностном знакомстве с подробностями спецификаций SOA, WSDL и веб-сервисов, по сравнению со многими другими известными продуктами как от гигантов софтверной индустрии, так и с бесплатными open-source решениями, что само по себе не является ни плюсом ни минусом, но может заставить задуматься.

Чтобы окончательно в этом убедиться я твердо решил в качестве примера реализовать при помощи web-сервисов хрестоматийный пример, на котором большинство студентов, изучавших вычислительную технику и программирование, практиковались ещё во время учебы в ВУЗ-ах, а именно игру «Жизнь» — клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 г.

Но не сразу, а постепенно, для начала, чтобы просто понять, как это работает, создадим простой веб-сервис, который будет иметь выполнять одну операцию с одним параметром строкового типа и будет возвращать тоже строку.

Для начала надо всё же установить веб-сервер, который будет обрабатывать запросы, это может быть Apache или IIS. Я предпочитаю Apache. Поскольку The Apache HTTP Server Project

предоставляет только исходники своего продукта, воспользуемся скомпилированной версией

от Apache House. (это обязательно должна быть 32-разрядная версия, веб-расширение 1С не работает с 64-разрядной)

Загрузив архив, распакуем его куда-нибудь, например, в корневой каталог. Далее, установим веб-сервер в качестве сервиса, запустив сервер из командной строки с параметром -k install, вот так:

c:Apache24inhttpd.exe -k install

Теперь нам нужно также:

  • создать в каталоге веб-документов каталог для публикации наших сревисов

  • установить web-расширение 1c-Предприятия

  • создать и опубликовать первый веб-сервис

Каталог для публикации должен быть расположен в каталоге c:Apache24htdocs.

Назовем его WebServices.

Теперь откроем панель управления: Панель управленияПрограммыПрограммы и компоненты, выберем нужную версию программы 1с-Предприятие, нужно будет нажать правую кнопку и выбрать пункт «Изменить», затем «Изменить-Далее» и выбрать в списке

«Модули расширения Веб-сервера» (Web server extention modules) — рис1

Рис1

Теперь создадим пустую файловую базу, в ней роль «Полная» с полными правами на все группы объектов и пользователя Admin, назначив ему эту единственную роль.

На вопрос, будет ли это работать в файловом варианте — ответ положительный (во всяком случае этот простой пример работает как файловая база).

Минус файловой версии — невозможность отладки серверных процедур.

Теперь приступим к реализации. В группе web-сервисы создадим новый объект с простым именем WebServiceTest, операцией с именем GetHelloString, которую будет обрабатывать функция Привет(Name) и параметром Name. И операция и параметр добавляются командой «добавить». Тип значения параметра Name — string (берется из пространства имен

http://www.w3.org/2001/XMLSchema)

URI пространства имен для сервиса указываем равный каталогу нашей публикации на веб-сервере — http://localhost/WebServices/

имя файла публикации может быть любым, но желательно латинским шрифтом и обязательно с расширением 1cws. Все вместе это выглядит так (Рис. 2):

Рис. 2

Тело функции Привет() модуля сервиса будет содержать только одну строку:

Функция Привет(Name)
Возврат("Здравствуй, дорогой друг "+Name+"!");
КонецФункции

Осталось только опубликовать сервис. Заходим в меню администрирование -> публикация на web-сервере. Откроется форма, в которую мы введем параметры публикации. Имя публикации должно совпадать с именем каталога на web-сервере.

В поле «Каталог» вводим путь к нашему каталогу на web-сервере, который мы создали ранее, то есть C:Apache24htdocsWebServices

Остальные параметры вы можете рассмотреть на рисунке Рис. 3

Рис. 3

перезапустим web-сервер, используя Apache monitor (оснастку служб Windows, закладку «службы» диспетчера задач, командную строку, bash, монитор процессов — что там у вас есть под рукой) чтобы данные публикации были считаны Апачем заново. Обновление публикации и перезапуск веб-сервера нужно делать после каждого сохранения конфигурации, связанного с изменениями веб-сервиса.

Осталось только протестировать нашу веб-службу. Для этого наберем в строке браузера http://localhost/WebServices/ws/1c_wstest.1cws?wsdl

или

https://localhost/WebServices/ws/1c_wstest.1cws?wsdl

Результат должен выглядеть как-то так:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/WebServices/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://localhost/WebServices/" name="WebServiceTest" targetNamespace="http://localhost/WebServices/">
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs1="http://localhost/WebServices/" targetNamespace="http://localhost/WebServices/" elementFormDefault="qualified">
<xs:element name="GetHelloString">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetHelloStringResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="return" type="xs:string"/>
<xs:element name="Name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="GetHelloStringRequestMessage">
<part name="parameters" element="tns:GetHelloString"/>
</message>
<message name="GetHelloStringResponseMessage">
<part name="parameters" element="tns:GetHelloStringResponse"/>
</message>
<portType name="WebServiceTestPortType">
<operation name="GetHelloString">
<input message="tns:GetHelloStringRequestMessage"/>
<output message="tns:GetHelloStringResponseMessage"/>
</operation>
</portType>
<binding name="WebServiceTestSoapBinding" type="tns:WebServiceTestPortType">
<soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHelloString">
<soapbind:operation style="document" soapAction="http://localhost/WebServices/#WebServiceTest:GetHelloString"/>
<input>
<soapbind:body use="literal"/>
</input>
<output>
<soapbind:body use="literal"/>
</output>
</operation>
</binding>
<binding name="WebServiceTestSoap12Binding" type="tns:WebServiceTestPortType">
<soap12bind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHelloString">
<soap12bind:operation style="document" soapAction="http://localhost/WebServices/#WebServiceTest:GetHelloString"/>
<input>
<soap12bind:body use="literal"/>
</input>
<output>
<soap12bind:body use="literal"/>
</output>
</operation>
</binding>
<service name="WebServiceTest">
<port name="WebServiceTestSoap" binding="tns:WebServiceTestSoapBinding">
<documentation>
<wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" conformsTo="http://ws-i.org/profiles/basic/1.1"/>
</documentation>
<soapbind:address location="https://localhost/WebServices/ws/1c_wstest.1cws"/>
</port>
<port name="WebServiceTestSoap12" binding="tns:WebServiceTestSoap12Binding">
<soap12bind:address location="https://localhost/WebServices/ws/1c_wstest.1cws"/>
</port>
</service>
</definitions>

Клиентская часть будет содержать чуть больше кода. Можно обращаться к сторонним сервисам двумя способами:

— использовать ws-ссылку (объект метаданных)

— создать ws-определение программно

Первый способ означает, что нам нужна ещё одна конфигурация, поэтому сейчас используем второй. Разница лишь в том, что мы создадим объект программно.

Создадим новую обработку с реквизитом Name, разместим его на форме, добавим форме команду Тест с двумя поцедурами, на клиенте и на сервере.

&НаСервере
Процедура ТестНаСервере()

ссл = Новый ЗащищенноеСоединениеOpenSSL;
всОпред = Новый WSОпределения("http://localhost/WebServices/ws/1c_wstest.1cws?wsdl","Admin","123",,,ссл);
всПрокси = Новый WSПрокси(всОпред, "http://localhost/WebServices/", "WebServiceTest", "WebServiceTestSoap",,,ссл);
всПрокси.Пользователь="Admin";
всПрокси.Пароль="123";

пакет = всПрокси.ФабрикаXDTO.Пакеты.Получить("http://www.w3.org/2001/XMLSchema");
типВС_Параметра = пакет.Получить("Name");

пИмя = ?(ЗначениеЗаполнено(Объект.Имя), Объект.Имя, "Name");  //передаваемая Строка должна быть непустая
всПараметр = всПрокси.ФабрикаXDTO.Создать(типВС_Параметра, пИмя);


Значение = всПрокси.GetHelloString(всПараметр);

Сообщить(Значение);



КонецПроцедуры

&НаКлиенте
Процедура Тест(Команда)
ТестНаСервере();
КонецПроцедуры

Параметры конструктора объекта WSПрокси ИмяСервиса и ИмяТочкиПодключения можно найти в XML-тексте, который возвращает наш сервис по URI https://localhost/WebServices/ws/1c_wstest.1cws?wsdl

А именно в элементе <service name=»ИмяНашегоСервиса»>

где ИмяСервиса — это атрибут Name этого элемента, то есть <service name=»WebServiceTest»>

ИмяТочкиПодключения — это атрибуты Name вложенных элементов

<port><port/>

Обычно мы имеем две точки для разных версий SOAP, в нашем случае они называются

WebServiceTestSoap и WebServiceTestSoap12 — можно использовать любой из них.

Сохраняем изменения в обработке, открываем её в любой базе и тестируем. Результат — вывод сообщения возвращенной операцией нашего удаленного сервиса строки. (Рис. 4)

Рис. 4

Продолжение в следующей части.

Содержание

Тестовый стенд

  • Windows XP

  • 1С:Предприятие 8.2 (8.2.15.289)

  • Тип базы: серверная

  • Web сервер Apache 2.2

  • Версия компонента: 1.0.15.5

в версии компонента 1.0.15.5 присутствуют два важных свойства:

  • РежимSOAPОповещений — тип Булево — при влючении отправляет все события на вебсервис по адресу указанному в следующем параметре.

  • АдресSOAPсервера — тип — Строка — адрес опубликованного веб сервиса для приема внешних событий компоненты.

Цели

  1. Запустить копонент на сервере 1С Предприятия

  2. Сконфигурировать web — сервис, который мог бы обрабатывать данные cdr записей, передаваемых копонентом

Запуск компонента на сервере

Подготовка конфигурации

  1. Создаем информационную базу с пустой конфигурацией

  2. Добавляем в конфигурацию обработку SDK_test_tools_v1_0_15_*

Описание нового XDTO пакета

  • Добавляем новый XDTO пакет (в дереве метаданных «Общие» – «XDTO пакеты», Щелчок правой кнопкой мыши – Добавить)

    • Укажем имя пакета XDTO_MIKO

  • Добавим новый тип объекта для пакета, отредактируем его свойства как на картинке:

  • Добавим новый web — Сервис (в дереве метаданных «Общие» – «web — Сервис», Щелчок правой кнопкой мыши – Добавить)

    • На вкладке «Основные» Имя зададим MIKO_Alam

    • На вкладке «Операции» добавим новую операцию:

  • Для операции необходимо добавить три параметра:

  • Сформируем обработчик для операции web сервиса:

 
        // Обработчик операции сервиса
	Функция EventListner(Источник, Событие, Данные)
		// полученные данные необходимо декодировать:
		Данные = URLDecode(Данные);
		// запишем в журнал регистрации
                ЗаписьЖурналаРегистрации("EventListner" + Данные);
 
		// пример разбора записи
		onCDR(Данные);
		// возвращаем xml структуру:
		Возврат ВернутьРезультатXDTO(Истина, 0);
 
	КонецФункции
 
	// Преобразование переданной строки из URLencoded версии
	// (необходимо декодировать данные)
	Функция URLDecode(стр)
		Хекс=Новый Массив;	
		Хекс.Добавить("0");
		Хекс.Добавить("1");       
		Хекс.Добавить("2");       
		Хекс.Добавить("3");
		Хекс.Добавить("4");
		Хекс.Добавить("5");
		Хекс.Добавить("6");
		Хекс.Добавить("7");
		Хекс.Добавить("8");
		Хекс.Добавить("9");
		Хекс.Добавить("A");
		Хекс.Добавить("B");
		Хекс.Добавить("C");
		Хекс.Добавить("D");
		Хекс.Добавить("E");
		Хекс.Добавить("F");
		рез="";
 
		ДлиннаСтроки = СтрДлина(стр);
		Для сч=1 по ДлиннаСтроки Цикл
			чар=Сред(стр,сч,1);
			Если чар = "%" И сч+2<=ДлиннаСтроки Тогда
				Сим1 = Сред(стр,сч+1,1);	
				Сим2 = Сред(стр,сч+2,1);
 
				Ном1 = Хекс.Найти(Сим1);
				Ном2 = Хекс.Найти(Сим2);
				Если Ном1 = Неопределено
					 ИЛИ Ном2 = Неопределено Тогда
					 рез = рез + чар;
					// тогда найденная комбинация не является спецсиволом
					Продолжить;
				КонецЕсли; 
 
				кс = 16 * Ном1 + Ном2;
				КорректныйСимвол = Символ(кс);
 
				рез = рез + КорректныйСимвол;
				// сдвинем счетчик на два символа
				сч = сч + 2;
			иначе
				рез = рез + чар;
			КонецЕсли; 
		КонецЦикла;
 
		Возврат рез;
 
	КонецФункции // ()
 
	// пример разбора зипаси CDR
	Процедура onCDR(Знач XMLУзел)
		//ПРИМЕР ОТВЕТА
		//<generic 
		//event='Cdr' 
		//privilege='cdr,all' 
		//sequencenumber='53045' 
		//file='cdr_manager.c' 
		//line='189' 
		//func='manager_log' 
		//accountcode='' 
		//source='263' 
		//destination='263' 
		//destinationcontext='from-internal' 
		//callerid='&quot;WORK Nikolay Beketov&quot; &lt;263&gt;' 
		//channel='SIP/263-0000013b' 
		//destinationchannel='SIP/263-0000013c' 
		//lastapplication='Dial' 
		//lastdata='SIP/263,,tr' 
		//starttime='2011-11-25 16:51:41' 
		//answertime='' 
		//endtime='2011-11-25 16:51:43' 
		//duration='2' 
		//billableseconds='0' 
		//disposition='NO ANSWER' 
		//amaflags='DOCUMENTATION' 
		//uniqueid='1322225501.545' 
		//userfield=''
		// />
		XMLУзел=ПолучитьЧтениеXML(XMLУзел);     
		Если XMLУзел=Неопределено Тогда
			Возврат;
		КонецЕсли; 
 
		privilege 	= XMLУзел.ПолучитьАтрибут("privilege");
		accountcode	= XMLУзел.ПолучитьАтрибут("accountcode");
		source		= XMLУзел.ПолучитьАтрибут("source");
		destination	= XMLУзел.ПолучитьАтрибут("destination");
 
	КонецПроцедуры
 
 
	// возвращаем значение в виде XDTO пакета
	Функция ВернутьРезультатXDTO(bool_result, error_code)
		СоставнойТип = ФабрикаXDTO.Тип("http://1C_MIKO_Asterisk.ru", "Compound");
		СоставнойXDTO = ФабрикаXDTO.Создать(СоставнойТип);
 
		СоставнойXDTO.error_code = error_code;
		СоставнойXDTO.bool_result = bool_result;   
 
		Возврат СоставнойXDTO;  // возврат XDTO знаяения
	КонецФункции // ВернутьСоставнойТип()
  • На вкладке «Прочее» сервиса необходимо указать пространство имен, ранее созданный XDTO пакет, имя файла публикации:

На этом конфигурирование web сервиса завершено.

Публикация web — сервиса

Предполагается, что имеется настроенный web сервер.

  • Главное меню «Администрирование» — «Публикация на web сервере»

  • Задаем имя публикации, тип сервера, что публикуем

  • Задаем имя сервиса, а также его адрес

  • После публикации сервиса в каталоге публикации будет сформирован файл default.vrd со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		base="/TestComponenta"
		ib="Srvr=&quot;fastwin7&quot;;Ref=&quot;TestComponenta&quot;;">
	<ws>
		<point name="MIKO_Alam"
				alias="1C_MIKO_Asterisk.1cws"/>
	</ws>
</point>

Проверка работоспособности сервиса

  • Добавим объект метаданных «WSСсылка» («Общие» — «WS — ссылки» — добавить)

  • Элемент ненумерованного спискаСоздать тестовую внешнюю обработку, обработчик кнопки выполнить:

	Прокси =WSСсылки.WSСсылка.СоздатьWSПрокси("http://1C_MIKO_Asterisk.ru","MIKO_Alam","MIKO_AlamSoap");
	Ответ = Прокси.EventListner("MikoAjamEvent","Cdr","<generic event='Cdr' privilege='cdr,all' sequencenumber='53045' file='cdr_manager.c' line='189' func='manager_log' accountcode='' source='263' destination='263' destinationcontext='from-internal' callerid='&quot;WORK Nikolay Beketov&quot; &lt;263&gt;' channel='SIP/263-0000013b' destinationchannel='SIP/263-0000013c' lastapplication='Dial' lastdata='SIP/263,,tr' starttime='2011-11-25 16:51:41' answertime='' endtime='2011-11-25 16:51:43' duration='2' billableseconds='0' disposition='NO ANSWER' amaflags='DOCUMENTATION' uniqueid='1322225501.545' userfield='' />");
  • Если все было корректно выполнено, то будет возвращен составной тип

Теперь описание сервиса доступно по ссылке: http://…ip_server…/TestComponenta/ws/1C_MIKO_Asterisk.1cws?wsdl

Запуск компонента

Для работы с компонентом на сервере, все необходимые процедуры и функции следует описать в серверном модуле и вызывать к примеру по расписанию

Пример работы на сервере может выглядеть следующим образом:

// основная 
Процедура ТестКомпонентаНаСервере() Экспорт
 
    Компонент = Неопределено;
    Инициализировать(Компонент);
 
    Если НЕ Компонент = Неопределено Тогда
	LoginНажатие(Компонент);
	PingНажатие(Компонент);
 
	ЗаписьЖурналаРегистрации("Все успешно отработало!");
    Иначе
	ЗаписьЖурналаРегистрации("Компонент = Неопределено!");
    КонецЕсли;
 
КонецПроцедуры
 
Процедура Инициализировать(Компонент) 
	СсылкаНаАрхив = ПоместитьВоВременноеХранилище(Обработки.SDK_test_tools_v1_0_15_2.ПолучитьМакет("AddInWindows32"), Новый УникальныйИдентификатор);
	Попытка
		ПодключитьВнешнююКомпоненту(СсылкаНаАрхив,"Comp" ,ТипВнешнейКомпоненты.Native);
		Компонент = Новый ("AddIn.Comp.MikoAjam");
		ЗаписьЖурналаРегистрации("Компонент успешно инициализирован!");
		// Предупреждение("Компонент телефонии успешно инициализирован");
	Исключение
		ЗаписьЖурналаРегистрации("Исключение при инициализации!");
		// Сообщить("Исключение при инициализации");
	КонецПопытки; 
КонецПроцедуры
 
Процедура LoginНажатие(Компонент)  
	Если Компонент = Неопределено Тогда
		Сообщить("Компонент не подключен, сначала инициализируйте его");
		Возврат;
	КонецЕсли; 
 
	Попытка
		Компонент.Хост 	   = "asterisk.adress.ru";
		Компонент.Порт 	   = "8088";
		Компонент.Таймаут  = 5;
		Компонент.DigestАвторизация = Ложь;;
		Компонент.РежимSSL = Ложь;
		Компонент.РежимSOAPОповещений = Истина;
 
                // далее укажем адрес сервиса (обратите внимание на формат адреса, тут нет постфикса **"?wsdl"**)
		Компонент.АдресSOAPсервера = "http://....ip_adres..../TestComponenta/ws/1C_MIKO_Asterisk.1cws"; 
 
		Результат="";
		Если Компонент.Login("cdruser","cdrpassword",Результат) Тогда
			ЗаписьЖурналаРегистрации( "Результат соединения: "+Результат + "" + Компонент.ВерсияКомпонента);
			// Сообщить("Результат соединения: "+Результат);
		Иначе
			ЗаписьЖурналаРегистрации("Авторизация не удалась."+ "" + Компонент.ВерсияКомпонента);
			// Предупреждение("Авторизация не удалась.");
		КонецЕсли;
 
 
	Исключение
		ЗаписьЖурналаРегистрации("Исключение при логине на сервере Asterisk");
		// Сообщить("Исключение при логине на сервере Asterisk");
	КонецПопытки; 
 
КонецПроцедуры
 
Процедура PingНажатие(Компонент) 
 
	Если Компонент = Неопределено Тогда
		Сообщить("Компонент не подключен");
		Возврат;
	КонецЕсли; 
 
	Попытка
		respose ="";
 
		Если Компонент.Ping(respose) Тогда
			ЗаписьЖурналаРегистрации("Результат пинга: "+respose);
			//Сообщить("Результат пинга: "+respose+Символы.ПС);
		Иначе
			ЗаписьЖурналаРегистрации("Ошибка команды Ping. "+respose);
			//Сообщить("Ошибка команды Ping. ");
		КонецЕсли;
 
	Исключение
		ЗаписьЖурналаРегистрации("Исключение при пинге!");
		//Сообщить("Исключение при пинге");
	КонецПопытки; 
 
КонецПроцедуры
 
Процедура LogoffНажатие(Компонент) 
	Если Компонент = Неопределено Тогда
		Сообщить("Компонент не подключен");
		Возврат;
	КонецЕсли; 
 
	Попытка
		Результат="";
		Компонент.Logoff(Результат);
		ЗаписьЖурналаРегистрации("Результат команды "+Результат);
		// Сообщить("Результат команды "+Элемент.Имя+" "+Результат);
	Исключение
		ЗаписьЖурналаРегистрации("Исключение при разлогинивании");
		// Сообщить("Исключение при разлогинивании");
	КонецПопытки; 
 
КонецПроцедуры

Коментарии

  • #1

Всем привет! Не получается проверить контрагентов в 1с. В журнал регистрации попадает ошибка:

Код:

{ОбщийМодуль.ПроверкаКонтрагентов.Модуль(2373)}: Ошибка при вызове метода контекста (NdsRequest2)
                               NdsResponse = Прокси.NdsRequest2(WSЗапрос);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса:  {http://ws.unisoft}:FNSNDSCAWS2:NdsRequest2()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка работы с Интернет:   Превышено время ожидания
по причине:
Ошибка работы с Интернет:   Превышено время ожидания

Подскажите в чем может быть дело?

Если у вас подключен сервис 1С:Контрагент и почему-то перестали заполняться реквизиты контрагентов по ИНН, выдает ошибку:

В журнале регистрации написано:

{ОбщийМодуль.ДанныеЕдиныхГосРеестров.Модуль(31)}: Ошибка при вызове метода контекста (getCorporationRequisitesByINN)
Ответ = Прокси.getCorporationRequisitesByINN(ВходныеПараметры);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://ws.orgregister.company1c.com/}:RequisitesWebServiceEndpointImpl7Service:getCorporationRequisitesByINN()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://company1c.com/orgregister/corporation}СвОКВЭД — [1,2762]Проверка дополнительного свойства:
форма: Атрибут
имя: ПрВерсОКВЭД
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://company1c.com/orgregister/corporation}СвОКВЭД — [1,2762]Проверка дополнительного свойства:
форма: Атрибут
имя: ПрВерсОКВЭД
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://company1c.com/orgregister/corporation}СвОКВЭД

Или

ОбщийМодуль.ДанныеЕдиныхГосРеестров.Модуль(181)}: Ошибка при вызове метода контекста (getCorporationRequisitesByNameAndAddress)
Ответ = Прокси.getCorporationRequisitesByNameAndAddress(ВходныеПараметры);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://ws.orgregister.company1c.com/}:RequisitesWebServiceEndpointImpl7Service:getCorporationRequisitesByNameAndAddress()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://company1c.com/orgregister/corporation}СвОКВЭД — [1,17598] Проверка дополнительного свойства:
форма: Атрибут
имя: ПрВерсОКВЭД
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://company1c.com/orgregister/corporation}СвОКВЭД — [1,17598] Проверка дополнительного свойства:
форма: Атрибут
имя: ПрВерсОКВЭД
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://company1c.com/orgregister/corporation}СвОКВЭД

Вот что нужно сделать:

Нужно открыть Главное меню (1), нажать «Все функции» (2) — рис.1

Рис.1

Если у вас нет пункта «Все функции», надо открыть Главное меню (3), нажать «Сервис» (4), Парамерты (5) — рис.2

Рис.2

В открывшемся окне поставить галочку «Отображать команду «Все функции» (6), ОК (7) — рис.3

Рис.3

В открывшемся окне нажимаем на «+» Регистры сведений (8) — рис.4

Рис.4

Ищем регистр сведений «Кэш программных интерфейсов» (9) — Открыть (10) — рис.5

Рис.5

В открывшемся списке необходимо найти и удалить запись со значением в колонке Идентификатор https://api.orgregister.1c.ru/orgregister/v7?wsdl (11) — правой кнопкой — Удалить (12) — рис.6

Рис.6

После этого нужно выйти из программы и войти снова.

Profile picture for user Олег

1C

Не люблю 1С. Его делают русские индусы. Однако, каждому сисадмину приходится с ним бороться.

Разбираемся с ошибкой «Сервис 1С:Контрагент не подключен.»

Текст ошибки:

Сервис 1С:Контрагент не подключен.
ИНН 1111111111:
{ОбщийМодуль.РаботаСКонтрагентами.Модуль(95)}: Ошибка при вызове метода контекста (getCorporationRequisitesByINN)
Ответ = Прокси.getCorporationRequisitesByINN(ВходныеПараметры);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса:
{http://ws.orgregister.company1c.com/}:RequisitesWebServiceEndpointImpl7Service:getCorporationRequisitesByINN()
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера:  
SERVER-11: Option 601a75a6-54cd-424b-a664-afe692855760 exceeds maxVolume 7200
Код ошибки: Server

Очень информативная ошибка, один раз посмотришь, два дня гуглишь, потом начинаешь присматриваться к цифре 7200…

Заходим на сайт сервиса 1С:Контрагент:
https://portal.1c.ru/app/kontragent

Ищем «7200» и находим.

1c

Это означает, что юзеры исчерпали лимит в 7200 кликов — дальше нужно или переходить на новый тариф или приобретать расширенную поддержку, куда Контрагент входит по умолчанию.

  1. Добрый день!
    Есть опубликованный веб-сервис. В нем есть несколько операций. Подключаюсь к веб-сервису мобильной платформой 1С. Все операции работают кроме одной. Одна отваливается с ошибкой:

    Ошибка при вызове операции сервиса: …
    Неизвестная ошибка. Ошибка разбора XML: -[1,1]
    Фатальная ошибка: Extra content at the end of the document.

    Тип возвращаемого значения операции:
    string (http://www.w3.org/2001/XMLSchema)

    Подскажите, в чем может быть проблема?

  2. Ребята, может все-таки есть у идеи, в чем может быть проблема?

  3. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.685
    Симпатии:
    1.011
    Баллы:
    204

    Типы возвращаемых значений проверить необходимо, как в пространстве имен, так и в свойствах самого параметра.

  4. Тип возвращаемого значения в операции веб-сервиса: string (http://www.w3.org/2001/XMLSchema). Такой же тип во всех остальных операциях этого же веб-сервиса, которые отрабатывают без ошибок.
    А что значит проверить тип возвращаемого значения в пространстве имен…?

    — Объединение сообщений, 28 окт 2016

    Может ли быть проблема в том, что один из входных параметров операции веб-сервиса имеет тип значения Array (_http://v8.1c.ru/8.1/data/core)?
    Я передаю его в веб-сервис следующим образом:

    СписокОбъектов = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "Array"));
            Для каждого Элемент из Массив Цикл
                     Тип = СериализаторXDTO.XMLТипЗнч(Элемент);
                     Значение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Тип.URIПространстваИмен, Тип.ИмяТипа),XMLСтрока(Элемент));
                     СписокОбъектов.value.Добавить(Значение);
            КонецЦикла;
       
         ........ //подключение к веб-сервису, создание определения и прокси...
    
    Результат = Прокси.MoveActive(Log, Клиент, СписокОбъектов);
    Сообщить(Результат);

    А сам веб-сервис возвращает ответ:

    Возврат "Перемещение прошло удачно";

    Последнее редактирование: 28 окт 2016

  5. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.685
    Симпатии:
    1.011
    Баллы:
    204

    Про пространство имен «v8.1c.ru/8.1/data/core» web-сервис вообще в курсе?

  6. До этого думала, что в курсе. Но если вы спрашиваете, то значит чего-то я не знаю)))))
    И что я не учла?

  7. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.685
    Симпатии:
    1.011
    Баллы:
    204

    Так я ж не знаю, чем умеет оперировать web-сервис, какие у него типы значений входных параметров — это вы должны знать.
    Если вы пытаетесь запихнуть в параметр определенный тип значения из определенного пространства имен, то про этот тип и пространство имен должен так же знать web-сервис — это как минимум, как максимум — знать что этот тип значения из этого пространства имен используется именно в этом входном параметре.

  8. Кажется, я поняла, про что вы… Спасибо за подсказку. Сейчас буду разбираться.

Помогите, разобраться с обработкой. Возникает ошибка при открытии через браузер:

Ошибка при выполнении файловой операции  ‘http://localhost:80/ZUP/ws/webservice?wsdl’

по причине:

Ошибка работы с Интернет:  внутренняя ошибка сервера (500). <soap:Envelope xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»>;

    <soap:Body>

        <soap:Fault>

            <faultcode>soap:Client</faultcode>

            <faultstring>Ошибка вызова операции сервиса:  {http://www.sample-package.org}:webservice:getWSDL()

по причине:

Ошибка инициализации библиотеки модулей

по причине:

{WebСервис.webservice.Модуль(27,13)}: Неопознанный оператор</faultstring>

            <detail/>

        </soap:Fault>

    </soap:Body>

</soap:Envelope>

по причине:

Ошибка работы с Интернет:  внутренняя ошибка сервера (500)

Сама обработка:

Функция ДанныеОтгрузки()

// Создаем объект XDTO с типом «Contragent»

ТипXDTO_Товар = ФабрикаXDTO.

  Тип(«http://www.sample-package.org»,»ЗаписьВедомости»;);

КорневойЭлемент = ФабрикаXDTO.Создать(ТипXDTO_Товар);

КорневойЭлемент.Name = «List of contragents»;

Запрос = Новый Запрос;

Запрос.Текст =

  «ВЫБРАТЬ

     |    ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо КАК Физлицо,

     |    ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо.Наименование КАК ФИО,

     |    ЗарплатаКВыплатеОрганизацийЗарплата.Сумма КАК Сумма,

     |    ЗарплатаКВыплатеОрганизаций.ПериодРегистрации КАК Период,

     |  ЗарплатаКВыплатеОрганизаций.Номер КАК НомерДокумента,

     |  ЗарплатаКВыплатеОрганизаций.Организация КАК Организация,

     |    ЗарплатаКВыплатеОрганизаций.Ответственный  КАК Ответственный

     |ИЗ

     |    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата

     |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций

     |        ПО ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = ЗарплатаКВыплатеОрганизаций.Ссылка

     |ГДЕ

     |    ЗарплатаКВыплатеОрганизаций.Ссылка = &Ссылка

     |ИТОГИ ПО

     |    Физлицо»);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();  

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл  

  // В свойство «ElementsContragents» записываем список

  // объектов «Contragent»  

  Элемент = ФабрикаXDTO.Создать(ТипXDTO_Товар);

  Элемент.ФИО = ВыборкаДетальныеЗаписи.ФИО;

  КорневойЭлемент.Сотрудник.Добавить(Элемент);    

КонецЦикла;

Возврат КорневойЭлемент;  

КонецФункции

Веб-сервисы и 1С: «Здравствуй, Name», время-деньги и «Жизнь»

«Вся наша жизнь — игра…» ( У. Шекспир)

«Что наша жизнь? Игра…» (А. Пушкин)

Часть вводная.

При разработке приложений с глобальным взаимодействием уже давно известна архитектура SOA (Service Oriented Architecture).

Такая архитектура подразумевает, что приложения на разных платформах, в разных средах взаимодействуют между собой, при этом разработчик может не беспокоиться о том, что находится внутри приложений на той стороне (т.е. об их реализации) , а также о том, что находится снаружи их (т.е. об их среде окружения).

Существует достаточно большое количество реализации этой архитектуры. Одним из видов такой реализации является технология основанная на связке специфицированных консорциумом w3c таких технологий, как веб-сервисы и протоколы SOAP, WSDL, WADL и т.п., которые в свою очередь основаны на XML. Уже достаточно длительное время эта технология интегрирована в платформу 1с Предприятие. Благодаря этому 1с предприятие может служить «сервером приложений», поставщиком сервисов, можно организовать взаимодействие между 1с, и приложениями, написанными на других платформах, можно организовать взаимодействие между различными системами на базе 1с и так далее.

Существует достаточно большое количество полезных web-сервисов, например: получение курсов валют, службы отправки почтовых сообщений и SMS на основе

web-сервисов и WSDL, каковую архитектуру используют туристические агентства, гостиницы, ритейлеры и т.п.

Часть 1. Здравствуй, Name!

Есть достаточное количество противников SOA и сторонников других технологий, как и тех, кто недолюбливает 1С. Однако существующая технология разработки на платформе 1с позволяет приступить к разработке и получить готовый результат довольно быстро при весьма поверхностном знакомстве с подробностями спецификаций SOA, WSDL и веб-сервисов, по сравнению со многими другими известными продуктами как от гигантов софтверной индустрии, так и с бесплатными open-source решениями, что само по себе не является ни плюсом ни минусом, но может заставить задуматься.

Чтобы окончательно в этом убедиться я твердо решил в качестве примера реализовать при помощи web-сервисов хрестоматийный пример, на котором большинство студентов, изучавших вычислительную технику и программирование, практиковались ещё во время учебы в ВУЗ-ах, а именно игру «Жизнь» — клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 г.

Но не сразу, а постепенно, для начала, чтобы просто понять, как это работает, создадим простой веб-сервис, который будет иметь выполнять одну операцию с одним параметром строкового типа и будет возвращать тоже строку.

Для начала надо всё же установить веб-сервер, который будет обрабатывать запросы, это может быть Apache или IIS. Я предпочитаю Apache. Поскольку The Apache HTTP Server Project

предоставляет только исходники своего продукта, воспользуемся скомпилированной версией

от Apache House. (это обязательно должна быть 32-разрядная версия, веб-расширение 1С не работает с 64-разрядной)

Загрузив архив, распакуем его куда-нибудь, например, в корневой каталог. Далее, установим веб-сервер в качестве сервиса, запустив сервер из командной строки с параметром -k install, вот так:

c:Apache24inhttpd.exe -k install

Теперь нам нужно также:

  • создать в каталоге веб-документов каталог для публикации наших сревисов

  • установить web-расширение 1c-Предприятия

  • создать и опубликовать первый веб-сервис

Каталог для публикации должен быть расположен в каталоге c:Apache24htdocs.

Назовем его WebServices.

Теперь откроем панель управления: Панель управленияПрограммыПрограммы и компоненты, выберем нужную версию программы 1с-Предприятие, нужно будет нажать правую кнопку и выбрать пункт «Изменить», затем «Изменить-Далее» и выбрать в списке

«Модули расширения Веб-сервера» (Web server extention modules) — рис1

Рис1

Теперь создадим пустую файловую базу, в ней роль «Полная» с полными правами на все группы объектов и пользователя Admin, назначив ему эту единственную роль.

На вопрос, будет ли это работать в файловом варианте — ответ положительный (во всяком случае этот простой пример работает как файловая база).

Минус файловой версии — невозможность отладки серверных процедур.

Теперь приступим к реализации. В группе web-сервисы создадим новый объект с простым именем WebServiceTest, операцией с именем GetHelloString, которую будет обрабатывать функция Привет(Name) и параметром Name. И операция и параметр добавляются командой «добавить». Тип значения параметра Name — string (берется из пространства имен

http://www.w3.org/2001/XMLSchema)

URI пространства имен для сервиса указываем равный каталогу нашей публикации на веб-сервере — http://localhost/WebServices/

имя файла публикации может быть любым, но желательно латинским шрифтом и обязательно с расширением 1cws. Все вместе это выглядит так (Рис. 2):

Рис. 2

Тело функции Привет() модуля сервиса будет содержать только одну строку:

Функция Привет(Name)
Возврат("Здравствуй, дорогой друг "+Name+"!");
КонецФункции

Осталось только опубликовать сервис. Заходим в меню администрирование -> публикация на web-сервере. Откроется форма, в которую мы введем параметры публикации. Имя публикации должно совпадать с именем каталога на web-сервере.

В поле «Каталог» вводим путь к нашему каталогу на web-сервере, который мы создали ранее, то есть C:Apache24htdocsWebServices

Остальные параметры вы можете рассмотреть на рисунке Рис. 3

Рис. 3

перезапустим web-сервер, используя Apache monitor (оснастку служб Windows, закладку «службы» диспетчера задач, командную строку, bash, монитор процессов — что там у вас есть под рукой) чтобы данные публикации были считаны Апачем заново. Обновление публикации и перезапуск веб-сервера нужно делать после каждого сохранения конфигурации, связанного с изменениями веб-сервиса.

Осталось только протестировать нашу веб-службу. Для этого наберем в строке браузера http://localhost/WebServices/ws/1c_wstest.1cws?wsdl

или

https://localhost/WebServices/ws/1c_wstest.1cws?wsdl

Результат должен выглядеть как-то так:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/WebServices/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://localhost/WebServices/" name="WebServiceTest" targetNamespace="http://localhost/WebServices/">
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs1="http://localhost/WebServices/" targetNamespace="http://localhost/WebServices/" elementFormDefault="qualified">
<xs:element name="GetHelloString">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetHelloStringResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="return" type="xs:string"/>
<xs:element name="Name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="GetHelloStringRequestMessage">
<part name="parameters" element="tns:GetHelloString"/>
</message>
<message name="GetHelloStringResponseMessage">
<part name="parameters" element="tns:GetHelloStringResponse"/>
</message>
<portType name="WebServiceTestPortType">
<operation name="GetHelloString">
<input message="tns:GetHelloStringRequestMessage"/>
<output message="tns:GetHelloStringResponseMessage"/>
</operation>
</portType>
<binding name="WebServiceTestSoapBinding" type="tns:WebServiceTestPortType">
<soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHelloString">
<soapbind:operation style="document" soapAction="http://localhost/WebServices/#WebServiceTest:GetHelloString"/>
<input>
<soapbind:body use="literal"/>
</input>
<output>
<soapbind:body use="literal"/>
</output>
</operation>
</binding>
<binding name="WebServiceTestSoap12Binding" type="tns:WebServiceTestPortType">
<soap12bind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHelloString">
<soap12bind:operation style="document" soapAction="http://localhost/WebServices/#WebServiceTest:GetHelloString"/>
<input>
<soap12bind:body use="literal"/>
</input>
<output>
<soap12bind:body use="literal"/>
</output>
</operation>
</binding>
<service name="WebServiceTest">
<port name="WebServiceTestSoap" binding="tns:WebServiceTestSoapBinding">
<documentation>
<wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" conformsTo="http://ws-i.org/profiles/basic/1.1"/>
</documentation>
<soapbind:address location="https://localhost/WebServices/ws/1c_wstest.1cws"/>
</port>
<port name="WebServiceTestSoap12" binding="tns:WebServiceTestSoap12Binding">
<soap12bind:address location="https://localhost/WebServices/ws/1c_wstest.1cws"/>
</port>
</service>
</definitions>

Клиентская часть будет содержать чуть больше кода. Можно обращаться к сторонним сервисам двумя способами:

— использовать ws-ссылку (объект метаданных)

— создать ws-определение программно

Первый способ означает, что нам нужна ещё одна конфигурация, поэтому сейчас используем второй. Разница лишь в том, что мы создадим объект программно.

Создадим новую обработку с реквизитом Name, разместим его на форме, добавим форме команду Тест с двумя поцедурами, на клиенте и на сервере.

&НаСервере
Процедура ТестНаСервере()

ссл = Новый ЗащищенноеСоединениеOpenSSL;
всОпред = Новый WSОпределения("http://localhost/WebServices/ws/1c_wstest.1cws?wsdl","Admin","123",,,ссл);
всПрокси = Новый WSПрокси(всОпред, "http://localhost/WebServices/", "WebServiceTest", "WebServiceTestSoap",,,ссл);
всПрокси.Пользователь="Admin";
всПрокси.Пароль="123";

пакет = всПрокси.ФабрикаXDTO.Пакеты.Получить("http://www.w3.org/2001/XMLSchema");
типВС_Параметра = пакет.Получить("Name");

пИмя = ?(ЗначениеЗаполнено(Объект.Имя), Объект.Имя, "Name");  //передаваемая Строка должна быть непустая
всПараметр = всПрокси.ФабрикаXDTO.Создать(типВС_Параметра, пИмя);


Значение = всПрокси.GetHelloString(всПараметр);

Сообщить(Значение);



КонецПроцедуры

&НаКлиенте
Процедура Тест(Команда)
ТестНаСервере();
КонецПроцедуры

Параметры конструктора объекта WSПрокси ИмяСервиса и ИмяТочкиПодключения можно найти в XML-тексте, который возвращает наш сервис по URI https://localhost/WebServices/ws/1c_wstest.1cws?wsdl

А именно в элементе <service name=»ИмяНашегоСервиса»>

где ИмяСервиса — это атрибут Name этого элемента, то есть <service name=»WebServiceTest»>

ИмяТочкиПодключения — это атрибуты Name вложенных элементов

<port><port/>

Обычно мы имеем две точки для разных версий SOAP, в нашем случае они называются

WebServiceTestSoap и WebServiceTestSoap12 — можно использовать любой из них.

Сохраняем изменения в обработке, открываем её в любой базе и тестируем. Результат — вывод сообщения возвращенной операцией нашего удаленного сервиса строки. (Рис. 4)

Рис. 4

Продолжение в следующей части.

Вернуться в основную статью

Для облегчения поиска ошибок был создан отдельный раздел для сбора ошибок из АРМ ЭРС, читайте внимательнее подсказки ниже:


Для поиска по статье нажмите Ctrl+F и введите первые символы кода ошибки или вопроса

Поделиться статьей в:


:!: После обновления программы до версии 3.0.34 от 07.03.2023 журнал ЭРС пустой, но отображается количество строк

Причина:

в процессе обновления не отработали скрипты, которые модифицируют БД

Решение:

  1. Открываем установщик АРМ ЭРС 3.0.34 любым архиватором (например 7zip)

  2. Переходим в ELN/updates

  3. Распаковываем последние три скрипта оттуда

  4. Открываем pgAdmin (о том, как с ним работать описано здесь)

  5. Переходим в tools — QueryTool

  6. Перетаскиваем эти три файла скрипта на текстовое поле.

  7. После этого нажимаем на запуск (иконка с треугольником)

Данными действиями мы вручную добавили в таблицу ers.recipient новое поле.

После данной манипуляции вы будете видеть весь журнал ЭРС как обычно


:!: В случае возникновения ошибки при отправке посещения или талона: Ошибка вызова сервиса передачи/получения данных. 146: Ошибка загрузки талона: Данные получателя услуг отличаются от имеющихся в фонде: Фамилия, Серия документа, Номер документа, Дата выдачи документа, Кем выдан документ

Причина:

Данные в фонде отличаются от тех, которые вы отправляете

Решение:

Откройте заново «Сведения о посещениях» и проверьте перечисленные в ошибке данные, в случае если данные верны — поставьте галочку — «Указанные сведения получателя верны, подтверждается несоответствие с данными СФР», после этого сохраните и отправьте посещение или талон.

Также его можно аннулировать и создать новое.


:!: В случае возникновения ошибки при отправке ЭРС: Ошибка вызова сервиса передачи/получения данных. 1206: Ошибка загрузки талона 1: Срок беременности менее 30 недель, либо отсутствует Талон 2 при преждевременных родах.

Причина:

В талоне 1 указан неправильный срок беременности который составляет менее 30 недель.

Решение:

Проверить корректность ввода данных о сроках беременности — повторить отправку


:!: В случае возникновения ошибки при получении ЭРС: Ошибка вызова сервиса передачи/получения данных. Поле docSerie отсутствует в запросе

Причина:

Отсутствует серия документа удостоверяющего личность в ЭРС.

Решение:

Создатель ЭРС должен заполнить данные документа удостоверяющего личность. За дополнительными разъяснениями обратитесь в свой региональный ТОФ


:!: В случае возникновения ошибки при отправке посещения: Ошибка вызова сервиса передачи/получения данных. -1000: Ошибка вставки записи о посещении: уже имеется запись с № ЭРС=_, МО ИНН=_, дата=_._.__. Для внесения изменений необходимо сначала аннулировать запись о посещении

Причина:

Вы отправили в СФР посещение, которое дублируется по дате

Решение:

Открываем «Сведения о посещениях» вносим изменения в посещение, отправляем посещение в СФР и запрашиваем результат обработки.

Также можно выделить посещение со статусом «Направлено с ошибками» и нажать кнопку «Удалить»


:!: В случае возникновения ошибки при отправке реестра: Невозможно отправить реестр талонов с периодом формирования, равным текущему месяцу

Причина:

Ошибка возникает из-за того, что реестр должен датироваться месяцем в котором он сформирован.

Решение:

Если вы отправляете реестр в начале месяца (например 1 января) то необходимо изменить дату реестра на 31 число предыдущего месяца (31 декабря), а дату формирования счета — текущий день календаря. НО ваш фонд может не принять данный реестр.

Также возможно стоит подождать решения ошибки от СФР или установить обновление ПО

Выдержка из чата СФР:

Реестры и счета за услуги декабря вы формируете январем в рамках договоров на 2022 год, не меняя срока действия договора. Создать в январе талоны за услуги, оказанные в декабре, система Фонда не позволяет. В случае талонов 1 и 3 будет продление периода оказания услуг по январь с формированием талонов в январе и предъявлении их на оплату в феврале. Проблема с талонами 2 решается с техподдержкой.


:!: В случае возникновения ошибки при получении результата обработки: Ошибка вызова сервиса передачи/получения данных VALID_SIGNATURE ЭП действительна; ERROR_BUILDING_CERT_PATH При проверке сертификата ЭП произошла ошибка. Ошибка построения цепочки сертификатов | INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения

Причина:

Ошибка возникает из-за нарушения корректности цепочки сертификатов — либо один из сертификатов цепочки просрочен, либо установлен не туда, либо это вообще некорректный сертификат.

Решение:

На рабочее место пользователя с 4.07.22 необходимо ставить в «Личное хранилище»:

Скачиваем и устанавливаем ВСЮ ЦЕПОЧКУ СЕРТИФИКАТОВ уполномоченного лица ФСС:

Ссылка на скачивание

(eln_prod_Личное.cer устанавливаем в «Личное» остальные два в «Доверенные корневые центры сертификации»)

Убеждаемся что у пользователя есть права на контейнер закрытого ключа учреждения


:!: В случае возникновения ошибки при запуске программы: Unable to build entity manager factory

Причина:

Ошибка возникает в случае отсутствия связи с СУБД PostgreSQL, либо сервер БД недоступен

Решение

Необходимо проверить на сервере БД запущена ли служба Postgresql-9.5 и доступен ли сервер БД, а также порт указанный при установке АРМ ЭРС


:!: В случае возникновения ошибки при запуске программы «Invalid Configuration Location» The configuration area at .. could not be created. Please choose a writable location using the ‘-configuration’ command line option

Причина:

Пользователю недостаточно места для создания и хранения временных файлов, создаваемых программой.

Решение:

Проверьте квотирование места на диске: уберите квотирование либо увеличьте доступное пользователю пространство,


:!: В случае возникновения ошибки при получении результата обработки: Connection could not be allocated. Listener does not currently know of service requested in connect descriptor

Причина:

Сервер СФР временно не доступен

Решение:

Необходимо ожидать восстановления работоспособности


:!: В случае возникновения ошибки при получении результата обработки: Отсутствует уполномоченный представитель с таким сертификатом ЭП

Причина:

Выбран неправильный сертификат УЛ СФР

Решение:

Скачать сертификат Уполномоченного лица СФР отсюда: https://lk.fss.ru/cert.html установить его в личные и выбрать его в настройках подписи.


:!: В случае возникновения ошибки при получении результата обработки: Ошибка вызова сервиса передачи/получения данных. Could not send Message

Причина:

Сервер ФСС временно не доступен

Решение:

Необходимо ожидать восстановления работоспособности


:!: В случае возникновения ошибки при запросе данных об оплате счета: Данные по запрашиваемому счету не могут быть переданы. Данные организации не соответствуют данным в предоставленном счете.

Причина:

Данные организации не соответствуют данным в счете

Решение:

Убедитесь что правильно заполнены реквизиты организации и они совпадают с сертификатом организации


:!: В случае возникновения ошибки при установке или обновлении программы «GostCryptography.dll Этому файлу не сопоставлена программа для выполнения этого действия»

Причина:

Возможно причина кроется в сломанных системных файлах

Решение:

Необходимо обновить систему и выполнить команды в командной строке от имени администратора:

sfc /scannow

и

DISM /Online /Cleanup-Image /RestoreHealth

После этого необходимо перезагрузиться

Подробнее вы можете прочитать здесь


:!: В случае возникновения «ошибки шифрования» при проставленной галочке
:

Причина:

Не применяются настройки шифрования выставленные в настройках ПО

Решение:

Перейти в «C:FssArmErsconfiguration.settings» (для х64 версии)

либо в «C:FssToolsconfiguration.settings» (для x86 версии)

Открыть в блокноте файл: ru.ibs.fss.eln.prefs
в конце добавить строчку
encryptmessages=1


:!: В случае возникновения «Internal Error COMCryptoAPIClient» :

Причина:

В процессе установки программы библиотека GostCryptography.dll по каким-то причинам не зарегистрировалась

Решение:

В командной строке CMD выполнить (с правами администратора):
Для x86 программы

cd C:FssTools
C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm.exe /registered GostCryptography.dll 

Для x64 программы

cd C:FssArmErs
C:WindowsMicrosoft.NETFramework64v4.0.30319RegAsm.exe /registered GostCryptography.dll 

:!: В случае возникновения ошибок «Сообщение не найдено» либо бесконечный «Вызов сервиса ФСС» либо «Ошибка вызова сервиса передачи/получения данных Error processing request — getResultByID»

Причина:

Сервис СФР перегружен, либо некорректна подпись МО

Решение:

Необходимо повторить отправку/запрос позднее. В программе АРМ ЭРС проверьте в настройках подписи корректна ли подпись медицинской организации (МО) либо сертификат СФР


:!: В случае возникновения «Ошибки дешифрования сообщения. Ошибка при попытке расшифровать сообщение»


Причина:

Причиной возникновения данной ошибки может служить чрезмерная нагрузка на сервис СФР, либо сбой криптопровайдера

Решение:

Попробуйте совершить операцию позднее.

В крайнем случае проблема может решиться переустановкой криптопровайдера (КриптоПРО или VipnetCSP)

Также в программе АРМ ЭРС проверьте в настройках подписи корректна ли подпись медицинской организации (МО) либо сертификат СФР

После обновления ПО данная настройка может быть пустой

Также можно попробовать удалить все установленные сертификаты связанные с СФР и скачать их по данной ссылке:
https://disk.yandex.ru/d/nAQmOZ7WZi8S1w

(eln_prod_Личное.cer устанавливаем в «Личное» остальные два в «Доверенные корневые центры сертификации»)

Убеждаемся что у пользователя есть права на контейнер закрытого ключа учреждения

Также можно снять галочку на «Проверять подпись на входящих сообщениях»


:!: В случае возникновения ошибки «вызова сервиса передачи/получения данных. Зарегистрировано»

Причина:

Перебои в работе сервиса взаимодействия СФР, ваш запрос в очереди

Решение:

Ждать, совершить запрос позднее


:!: В случае возникновения ошибки «Отсутствует лицензия на осуществление медицинской деятельности»

Причина:

Текст ошибки говорит сам за себя

Решение:

Необходимо проверить введенные в настройках реквизиты организации а также связаться с региональным представителем СФР


:!: В случае возникновения ошибки «Отсутствует заключенный договор с ТОФ на оказание услуг»

Причина:

Текст ошибки говорит сам за себя

Решение:

Необходимо связаться с региональным представителем СФР


:!: В случае возникновения ошибки «Internal Error Rollback Exception» при попытке открыть сведения о посещениях

Причина:

Ошибка возникает из-за отсутствующих строк и колонок в БД — программа пытается прочитать данные в несуществующих ячейках

Решение:

Необходимо обновить ПО на рабочем месте, где установлена БД


:!: В случае возникновения ошибки «Unmarchalling Error» при попытке отправить/запросить талон/ЭРС

Причина:

скорее всего неправильно заполнены данные в определенном поле

Решение:

Необходимо изучить текст ошибки

(в данном примере ошибка гласит о том, что введено 10 цифр в поле, где должно быть 12 цифр)


:!: В случае возникновения ошибки «Invalid element in ErsOpenService .. -registerMODate» при попытке отправить/запросить ЭРС

Причина:

Вы используете устаревшую версию программы, введены новые контроли, поля и т.д.

Решение:

Необходимо обновить АРМ ЭРС


:!: В случае возникновения ошибки «ЭЦП неверна SIGNATURE ERROR ЭП Недействительна» при попытке отправить/запросить талон/ЭРС также возникает при запросе счета

Причина:

Внутренняя ошибка программы, из-за которой подпись на талоне не проставилась корректно

Решение:

Необходимо в талоне нажать кнопку «На подписании» затем снова подписать талон кнопкой «Подпись руководителя ЛПУ» (может потребоваться нажать 2 раза)

После этого повторно отправить талон


:!: В случае возникновения ошибки «В настройках соединения указан неправильный порт. Проверьте правильность адреса сервиса в настройках соединения» при попытке отправить/запросить талон/ЭРС

Причина:

Проблема связана с недоступностью (полной неработоспособностью сервиса СФР)

Решение:

Необходимо ожидать восстановления работоспособности сервиса


:!: В случае возникновения ошибки «Ошибка вызова сервиса передачи/получения данных. Несоответствующий статус для включения талонов в реестр» при попытке включить талоны в реестр

Причина:

Статус талонов в реестре отличается от «Принято в ТОФ»

Решение:

Для решения проблемы нужно убедиться, что статус перечисленных в ошибке талонов, включенных в реестр должен быть — Принято в ТОФ

Часто бывает так, что статус талона в локальной базе может отличаться от статуса в СФР (для этого можно запросить статус обработки повторно) можно уточнить этот момент у представителя СФР


:!: В случае возникновения ошибки «Дата постановки на учет должна быть равна началу периода наблюдения» при попытке сохранить ЭРС

Причина:

Дата постановки на учет была забита вручную и скорее всего неправильно

Решение:

Необходимо ввести одинаковую дату постановки на учет и дату начала периода наблюдения через кнопку «Календарь» в поле с датами


:!: В случае возникновения ошибки «Premature end of file»

Причина:

Ошибка возникает, когда валидация отправляемого XML-файла не проходит на удаленном сервисе. Проблема на стороне СФР.

Решение:

Ждать исправления


:!: В случае возникновения ошибки «Ошибка вызова сервиса передачи/получения данных. 1606: Несоответствующий статус для включения талонов в реестр: Талон» при попытке получить результат обработки счета

Причина:

Для счета не нужно запрашивать результат обработки

Решение:

Для решения проблемы необходимо нажать кнопку «Получить данные об оплате счета»


:!: В случае возникновения ошибки «Не удалось подписать информацию Invalid Iddata=[имя талона]» подписать реестр

Причина:

Некорректно заполнено поле — номер реестра

Решение:

Необходимо удалить пробелы или другие запрещенные символы из номера реестра


:!: В случае возникновения ошибки «The content of element ‘status’ is not complete.» при попытке запросить результат обработки

Причина:

Проблема на стороне сервиса взаимодействия с СФР

Решение:

Необходимо ждать решения проблемы со стороны СФР


:!: В случае возникновения ошибки Validator Exception: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed

Причина:

Проблема с SSL сертификатом на стороне СФР

Решение:

Необходимо обновить ПО, либо подсунуть файл из архива cacerts.zip

в папку с программой/jre/lib/security


:!: В случае возникновения ошибки «Internal error Widget is disposed»

Причина:

Внутренняя ошибка программы

Решение:

Перед любыми действиями делайте резервную копию папки!

Необходимо удалить содержимое папки

C:FssArmErsworkspace.metadata.pluginsorg.eclipse.e4.workbench

После этого перезапустите приложение


:!: В случае возникновения ошибки при отправке реестров «Ошибка вызова сервиса передачи/получения данных. Unmarshalling Error: Длина поля типа #AnonType_bankCheckingAccbillinfo не соответствует ограничению»

Причина:

Ограничение на минимальную длину обязательного поля для реквизитов банка в счете

Решение:

Убедитесь в корректности заполнения реквизитов банковского счета. Смотрите текст ошибки:

<bankCheckingAcc/> р/с минимум 20 символов
<bankName/> наименование банка минимум 4 символа
<bankBIK/> БИК банка минимум 6 символов

:!: В случае возникновения ошибки при сохранении и отправки счета «Ошибка при попытке сохранить данные в базу данных Error while committing the transaction»

Причина:

В схеме ers отсутствует столбец «final_price_fss» в таблице «fc_ers_check»

Решение:

Запускаем pgAdmin, открываем базу, переходим к схеме «ers»

Далее нажать на:

Качаем этот SQL-запрос и исполняем его в PgAdmin

Либо исполняем вручную данный запрос:

ALTER TABLE ers.fc_ers_check ADD COLUMN final_price_fss character varying(200);

UPDATE ers.fc_ers_check a
SET final_price_fss = (
	(	
		SELECT COALESCE(SUM(payment_sum::INTEGER), 0)
		FROM ers.fc_ers_payment
		WHERE id_check = a.id 
			AND (order_status = 1 OR order_status = 4)
	) - (
		SELECT COALESCE(SUM(payment_sum::INTEGER), 0)
		FROM ers.fc_ers_payment
		WHERE id_check = a.id 
			AND (order_status = 2 OR order_status = 3)
	)
)
WHERE a.id_check_state = 4;

UPDATE ers.fc_ers_check a
SET final_price_fss = ''
WHERE a.id_check_state != 4;

:!: В случае возникновения ошибки — java.lang.OutOfMemoryError: Java heap space

Причина:

Ошибка возникает из-за нехватки памяти вызванной утечкой.

Решение:

Перезапустить ПО и ПК, попробовать действие еще раз, убедитесь, что у вас установлена последняя версия ПО


:!: В случае возникновения ошибки — Transaction already active

Причина:

Ошибка возникает из-за того, что выбранный вами запрос к базе данных уже совершается.

Решение:

Перезапустить ПО и ПК, перезапустить службу postgresql10 на клиенте и на сервере, попробовать действие еще раз, убедитесь, что у вас установлена последняя версия ПО


:!: В случае возникновения ошибки при попытке сохранить данные в базу данных «org.hibernate.HibernateException: More than one row with the given identifier was found: for class: ru.ibs.common.db.model.ers.FcErsTalon1»

Причина:

Появилась вторая строка в таблице «ers.fc_ers_talon1»

Решение:

Выполнить скрипт в PGAdmin:

delete from ers.fc_ers_talon1 where ers_num=номерэрс

После данного действия талон придется вводить заново.


:!: В случае возникновения ошибки The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

Причина:

Версия протокола TLS на сервере отличается от версии TLS клиента

Решение:

Идем в папка_с_программой/jre/lib/security

Открываем файл java.security в блокноте

Ищем в нем строчку jdk.tls.disabledAlgorithms — удаляем tlsv1 и tlsv1.1

Сохраняемся


:!: В случае возникновения ошибки при попытке получить ЭРС из СФР — Error while commiting transaction. Invalid thread access

Причина:

Ошибка возникает из-за того, что реестр должен датироваться месяцем в котором он сформирован.

Решение:

Через консольный лог выясняем, в какую таблицу идёт ошибка записи, после чего через pgadmin исправляется значение соответствующей последовательности на max(ID) +1 из таблицы.

Пошагово:

находим нужное значение ID

Проставляем его в последовательности, не забыв прибавить единичку и сохраняем.

Выражаю благодарность за вклад в данный раздел пользователю: @Icosahedron

Всем, кому понравился или помог это проект — Вы можете помочь ему развиваться материально:
Поддержать проект

Одной из распространенных ошибок, с которой можно столкнуться при работе с веб-сервисами, является ошибка вызова операции сервиса getwsdl. Эта ошибка часто возникает в процессе разработки и тестирования программного обеспечения, использующего веб-сервисы. При вызове операции сервиса getwsdl, программа не получает необходимый WSDL-документ, что приводит к некорректной работе приложения.

Основной причиной возникновения ошибки вызова операции сервиса getwsdl является неправильная конфигурация веб-сервиса или некорректные настройки клиентского приложения. Также, данная ошибка может быть вызвана некорректным URL-адресом веб-сервиса или отсутствием доступа к нужному ресурсу. Для исправления ошибки нужно провести несколько действий, которые позволят получить правильный WSDL-документ и корректно вызывать операцию сервиса.

В первую очередь, необходимо убедиться, что конфигурация веб-сервиса на стороне сервера правильно настроена. Проверьте, что все параметры и настройки сервиса соответствуют требованиям вашего приложения. Возможно, что конфигурация веб-сервиса имеет некорректные значения или не соответствует текущим требованиям.

Также, стоит проверить URL-адрес веб-сервиса. Убедитесь, что URL-адрес указан правильно и доступен для вашего клиентского приложения. В случае, если у вас есть возможность, попробуйте открыть URL-адрес веб-сервиса в браузере или используйте инструменты для проверки доступности ресурса. Возможно, что проблема с вызовом операции сервиса getwsdl связана с недоступностью или некорректной настройкой URL-адреса.

Если проблема не устранена после проверки конфигурации веб-сервиса и URL-адреса, рекомендуется обратиться к разработчикам или администраторам веб-сервиса для получения дополнительной помощи. Возможно, что ошибка вызова операции сервиса getwsdl связана с проблемой на стороне сервиса, которую необходимо исправить или настроить.

Содержание

  1. Как решить проблему с вызовом сервиса getwsdl
  2. Основные причины ошибки
  3. Методы решения проблемы
  4. Применение утилиты WsdlUtil
  5. Рекомендации для программистов
  6. 1. Проверьте правильность URL-адреса
  7. 2. Проверьте доступность сервиса
  8. 3. Проверьте настройки безопасности
  9. 4. Проверьте параметры вызова
  10. 5. Проверьте версию сервиса
  11. 6. Проверьте логи

Как решить проблему с вызовом сервиса getwsdl

Ошибка вызова операции сервиса getwsdl может возникнуть по разным причинам. Однако, существует несколько шагов, которые могут помочь в решении данной проблемы.

  1. Проверьте правильность URL: Убедитесь, что URL, по которому вы пытаетесь вызвать сервис getwsdl, написан правильно. Проверьте, что вы указали корректный протокол (например, http:// или https://) и правильный домен.
  2. Проверьте доступность сервиса: Проверьте, что сервис getwsdl доступен и работает нормально. Вы можете использовать различные инструменты, такие как «ping» или «telnet», чтобы убедиться, что удаленный сервер доступен и отвечает.
  3. Проверьте параметры вызова: Убедитесь, что вы правильно указали все необходимые параметры при вызове сервиса getwsdl. Проверьте, что вы передаете корректные значения для всех обязательных параметров.
  4. Проверьте права доступа: Проверьте, что у вас есть достаточные права доступа для вызова сервиса getwsdl. Убедитесь, что вы авторизованы на сервере и имеете необходимые разрешения для выполнения операции.
  5. Проверьте наличие ошибок в логах: Проверьте логи сервиса на наличие ошибок во время вызова операции getwsdl. Ошибки в логах могут дать вам полезную информацию о причине возникновения проблемы.
  6. Обратитесь за помощью: Если вы все еще не можете решить проблему с вызовом сервиса getwsdl, обратитесь за помощью к разработчику сервиса или специалисту по технической поддержке.

Следуя этим шагам, вы должны быть в состоянии решить проблему с вызовом операции сервиса getwsdl и успешно получить необходимую информацию.

Основные причины ошибки

Ошибка вызова операции сервиса getwsdl может быть вызвана несколькими причинами. Ниже представлены основные из них:

  • Отсутствие доступа к сервису. Возможно, сервис, к которому производится вызов операции getwsdl, не доступен в текущий момент. Это может быть вызвано проблемами сети, неправильной конфигурацией сервера или другими техническими причинами.

  • Нет прав на выполнение операции getwsdl. Если у вас отсутствуют необходимые права доступа, то вызов операции getwsdl может быть запрещен системой. Обратитесь к администратору системы или разработчику, чтобы получить необходимые права доступа.

  • Неправильный формат запроса. Если запрос на вызов операции getwsdl содержит неправильный формат или неверные параметры, сервер может отказаться его обработать и вернуть ошибку. Проверьте правильность составления запроса и соответствие его требованиям сервиса.

  • Проблемы с обновлением сервиса. Если сервис, к которому производится вызов операции getwsdl, находится в процессе обновления или тестирования, это может вызвать ошибку при вызове операции. Дождитесь окончания обновления или проверьте уведомления от разработчиков о временных недоступностях.

Это основные причины ошибки вызова операции сервиса getwsdl. Если вы продолжаете столкнуться с этой ошибкой, рекомендуется обратиться к поддержке или разработчикам сервиса для получения дополнительной помощи.

Методы решения проблемы

Если вы столкнулись с ошибкой вызова операции сервиса getwsdl, необходимо принять меры для ее устранения. Существует несколько методов решения данной проблемы, которые мы рассмотрим ниже:

  1. Проверьте доступность сервиса
  2. Первым шагом необходимо убедиться, что сервис, к которому вы обращаетесь, доступен. Проверьте его статус и убедитесь, что он функционирует корректно.

  3. Проверьте правильность параметров
  4. Убедитесь, что вы корректно передаете параметры вызываемой операции сервиса. Проверьте их названия, типы данных и значения.

  5. Проверьте соединение с интернетом
  6. Если ваше приложение зависит от доступа к интернету для выполнения операции getwsdl, убедитесь, что у вас есть работающее и стабильное интернет-соединение.

  7. Перезагрузите приложение или сервер
  8. Иногда ошибки вызова операции сервиса могут быть вызваны временными проблемами с приложением или сервером. Попробуйте перезагрузить приложение или сервер и повторно выполнить операцию.

  9. Обратитесь в техническую поддержку
  10. Если ни один из предыдущих методов не помог вам решить проблему, рекомендуется обратиться в службу технической поддержки. Они смогут провести более детальное исследование ошибки и предложить специфические решения для вашего случая.

Применение утилиты WsdlUtil

Утилита WsdlUtil является мощным инструментом для работы с файлами WSDL (Web Services Description Language). С ее помощью вы можете выполнять различные операции с файлами WSDL, такие как генерация Java-кода из WSDL-файла, создание документации по веб-сервисам и многое другое. Применение утилиты WsdlUtil может значительно облегчить разработку и тестирование веб-сервисов.

Вот некоторые примеры использования утилиты WsdlUtil:

  • Создание Java-кода из WSDL-файла. С помощью команды java org.apache.axis.wsdl.Wsdl2java вы можете сгенерировать Java-код, который будет использоваться для взаимодействия с веб-сервисом. Например, вы можете создать классы, которые представляют веб-сервисные методы и данные.
  • Создание документации по веб-сервисам. Утилита WsdlUtil позволяет сгенерировать подробную документацию по веб-сервису на основе файла WSDL. Это полезно для описания функциональности и использования веб-сервиса.
  • Проверка корректности WSDL-файла. Утилита WsdlUtil может помочь вам проверить, соответствует ли WSDL-файл стандартам и имеет ли он правильную структуру. Это полезно для выявления ошибок и проблем в WSDL-файле.
  • Генерация клиентского кода. Вы можете использовать утилиту WsdlUtil, чтобы сгенерировать клиентский код, который будет использоваться для вызова веб-сервиса. Это особенно полезно, если вы разрабатываете клиентское приложение для веб-сервиса.

Утилита WsdlUtil предоставляет множество возможностей для работы с файлами WSDL и может быть полезной во многих сценариях разработки веб-сервисов. Ее использование поможет упростить создание и использование веб-сервисов, а также улучшит качество и надежность вашего кода. Рекомендуется ознакомиться с документацией по утилите WsdlUtil, чтобы полностью использовать все ее возможности.

Рекомендации для программистов

Ошибки вызова операции сервиса getwsdl могут быть довольно распространенными, но в большинстве случаев они легко исправимы. В этом разделе мы рассмотрим несколько рекомендаций для программистов, которые помогут вам справиться с этой ошибкой.

1. Проверьте правильность URL-адреса

Первым делом необходимо убедиться, что URL-адрес, по которому вы пытаетесь получить WSDL, указан правильно. Проверьте, что вы используете правильный протокол (например, http или https) и что URL-адрес не содержит опечаток или лишних символов.

2. Проверьте доступность сервиса

Удостоверьтесь, что сервис, с которым вы пытаетесь установить соединение, доступен и работает без проблем. Проверьте правильность IP-адреса или доменного имени сервера, на котором запущен сервис, и убедитесь, что сервер не перегружен или не находится в состоянии обслуживания.

3. Проверьте настройки безопасности

Возможно, ошибка вызова операции сервиса getwsdl связана с неправильными настройками безопасности. Убедитесь, что ваше приложение имеет достаточные разрешения для получения WSDL. Проверьте права доступа к файлам и папкам, а также учетные данные, используемые для аутентификации.

4. Проверьте параметры вызова

Проверьте, что вы правильно указали все необходимые параметры при вызове операции getwsdl. Убедитесь, что вы передаете все необходимые данные, такие как идентификаторы или ключи, и что они указаны в правильном формате. Проверьте также, что вы используете правильный метод вызова и правильные настройки передачи данных.

5. Проверьте версию сервиса

Иногда ошибка может возникать из-за несовместимости версий сервиса и клиентского приложения. Убедитесь, что ваше приложение использует поддерживаемую версию сервиса и что они совместимы. Обратитесь к документации сервиса или разработчикам для получения подробной информации о поддерживаемых версиях сервиса.

6. Проверьте логи

При анализе ошибки вызова операции сервиса getwsdl можно обратиться к журналам или логам, чтобы получить дополнительную информацию о возможных причинах ошибки. Обратитесь к журналам и логам вашего приложения или сервиса, чтобы найти дополнительные сведения о возникшей ошибке. Это поможет вам сузить проблему и найти наиболее подходящее решение.

Следуя этим рекомендациям, вы сможете исправить ошибку вызова операции сервиса getwsdl и успешно получить необходимые данные. Если у вас возникли какие-либо дополнительные вопросы или проблемы, не стесняйтесь обращаться к документации сервиса или обратиться за помощью к соответствующим специалистам.

Веб-сервисы и 1С: «Здравствуй, Name», время-деньги и «Жизнь»

«Вся наша жизнь — игра…» ( У. Шекспир)

«Что наша жизнь? Игра…» (А. Пушкин)

Часть вводная.

При разработке приложений с глобальным взаимодействием уже давно известна архитектура SOA (Service Oriented Architecture).

Такая архитектура подразумевает, что приложения на разных платформах, в разных средах взаимодействуют между собой, при этом разработчик может не беспокоиться о том, что находится внутри приложений на той стороне (т.е. об их реализации) , а также о том, что находится снаружи их (т.е. об их среде окружения).

Существует достаточно большое количество реализации этой архитектуры. Одним из видов такой реализации является технология основанная на связке специфицированных консорциумом w3c таких технологий, как веб-сервисы и протоколы SOAP, WSDL, WADL и т.п., которые в свою очередь основаны на XML. Уже достаточно длительное время эта технология интегрирована в платформу 1с Предприятие. Благодаря этому 1с предприятие может служить «сервером приложений», поставщиком сервисов, можно организовать взаимодействие между 1с, и приложениями, написанными на других платформах, можно организовать взаимодействие между различными системами на базе 1с и так далее.

Существует достаточно большое количество полезных web-сервисов, например: получение курсов валют, службы отправки почтовых сообщений и SMS на основе

web-сервисов и WSDL, каковую архитектуру используют туристические агентства, гостиницы, ритейлеры и т.п.

Часть 1. Здравствуй, Name!

Есть достаточное количество противников SOA и сторонников других технологий, как и тех, кто недолюбливает 1С. Однако существующая технология разработки на платформе 1с позволяет приступить к разработке и получить готовый результат довольно быстро при весьма поверхностном знакомстве с подробностями спецификаций SOA, WSDL и веб-сервисов, по сравнению со многими другими известными продуктами как от гигантов софтверной индустрии, так и с бесплатными open-source решениями, что само по себе не является ни плюсом ни минусом, но может заставить задуматься.

Чтобы окончательно в этом убедиться я твердо решил в качестве примера реализовать при помощи web-сервисов хрестоматийный пример, на котором большинство студентов, изучавших вычислительную технику и программирование, практиковались ещё во время учебы в ВУЗ-ах, а именно игру «Жизнь» — клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 г.

Но не сразу, а постепенно, для начала, чтобы просто понять, как это работает, создадим простой веб-сервис, который будет иметь выполнять одну операцию с одним параметром строкового типа и будет возвращать тоже строку.

Для начала надо всё же установить веб-сервер, который будет обрабатывать запросы, это может быть Apache или IIS. Я предпочитаю Apache. Поскольку The Apache HTTP Server Project

предоставляет только исходники своего продукта, воспользуемся скомпилированной версией

от Apache House. (это обязательно должна быть 32-разрядная версия, веб-расширение 1С не работает с 64-разрядной)

Загрузив архив, распакуем его куда-нибудь, например, в корневой каталог. Далее, установим веб-сервер в качестве сервиса, запустив сервер из командной строки с параметром -k install, вот так:

c:Apache24inhttpd.exe -k install

Теперь нам нужно также:

  • создать в каталоге веб-документов каталог для публикации наших сревисов

  • установить web-расширение 1c-Предприятия

  • создать и опубликовать первый веб-сервис

Каталог для публикации должен быть расположен в каталоге c:Apache24htdocs.

Назовем его WebServices.

Теперь откроем панель управления: Панель управленияПрограммыПрограммы и компоненты, выберем нужную версию программы 1с-Предприятие, нужно будет нажать правую кнопку и выбрать пункт «Изменить», затем «Изменить-Далее» и выбрать в списке

«Модули расширения Веб-сервера» (Web server extention modules) — рис1

Рис1

Теперь создадим пустую файловую базу, в ней роль «Полная» с полными правами на все группы объектов и пользователя Admin, назначив ему эту единственную роль.

На вопрос, будет ли это работать в файловом варианте — ответ положительный (во всяком случае этот простой пример работает как файловая база).

Минус файловой версии — невозможность отладки серверных процедур.

Теперь приступим к реализации. В группе web-сервисы создадим новый объект с простым именем WebServiceTest, операцией с именем GetHelloString, которую будет обрабатывать функция Привет(Name) и параметром Name. И операция и параметр добавляются командой «добавить». Тип значения параметра Name — string (берется из пространства имен

http://www.w3.org/2001/XMLSchema)

URI пространства имен для сервиса указываем равный каталогу нашей публикации на веб-сервере — http://localhost/WebServices/

имя файла публикации может быть любым, но желательно латинским шрифтом и обязательно с расширением 1cws. Все вместе это выглядит так (Рис. 2):

Рис. 2

Тело функции Привет() модуля сервиса будет содержать только одну строку:

Функция Привет(Name)
Возврат("Здравствуй, дорогой друг "+Name+"!");
КонецФункции

Осталось только опубликовать сервис. Заходим в меню администрирование -> публикация на web-сервере. Откроется форма, в которую мы введем параметры публикации. Имя публикации должно совпадать с именем каталога на web-сервере.

В поле «Каталог» вводим путь к нашему каталогу на web-сервере, который мы создали ранее, то есть C:Apache24htdocsWebServices

Остальные параметры вы можете рассмотреть на рисунке Рис. 3

Рис. 3

перезапустим web-сервер, используя Apache monitor (оснастку служб Windows, закладку «службы» диспетчера задач, командную строку, bash, монитор процессов — что там у вас есть под рукой) чтобы данные публикации были считаны Апачем заново. Обновление публикации и перезапуск веб-сервера нужно делать после каждого сохранения конфигурации, связанного с изменениями веб-сервиса.

Осталось только протестировать нашу веб-службу. Для этого наберем в строке браузера http://localhost/WebServices/ws/1c_wstest.1cws?wsdl

или

https://localhost/WebServices/ws/1c_wstest.1cws?wsdl

Результат должен выглядеть как-то так:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/WebServices/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://localhost/WebServices/" name="WebServiceTest" targetNamespace="http://localhost/WebServices/">
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs1="http://localhost/WebServices/" targetNamespace="http://localhost/WebServices/" elementFormDefault="qualified">
<xs:element name="GetHelloString">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetHelloStringResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="return" type="xs:string"/>
<xs:element name="Name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="GetHelloStringRequestMessage">
<part name="parameters" element="tns:GetHelloString"/>
</message>
<message name="GetHelloStringResponseMessage">
<part name="parameters" element="tns:GetHelloStringResponse"/>
</message>
<portType name="WebServiceTestPortType">
<operation name="GetHelloString">
<input message="tns:GetHelloStringRequestMessage"/>
<output message="tns:GetHelloStringResponseMessage"/>
</operation>
</portType>
<binding name="WebServiceTestSoapBinding" type="tns:WebServiceTestPortType">
<soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHelloString">
<soapbind:operation style="document" soapAction="http://localhost/WebServices/#WebServiceTest:GetHelloString"/>
<input>
<soapbind:body use="literal"/>
</input>
<output>
<soapbind:body use="literal"/>
</output>
</operation>
</binding>
<binding name="WebServiceTestSoap12Binding" type="tns:WebServiceTestPortType">
<soap12bind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHelloString">
<soap12bind:operation style="document" soapAction="http://localhost/WebServices/#WebServiceTest:GetHelloString"/>
<input>
<soap12bind:body use="literal"/>
</input>
<output>
<soap12bind:body use="literal"/>
</output>
</operation>
</binding>
<service name="WebServiceTest">
<port name="WebServiceTestSoap" binding="tns:WebServiceTestSoapBinding">
<documentation>
<wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" conformsTo="http://ws-i.org/profiles/basic/1.1"/>
</documentation>
<soapbind:address location="https://localhost/WebServices/ws/1c_wstest.1cws"/>
</port>
<port name="WebServiceTestSoap12" binding="tns:WebServiceTestSoap12Binding">
<soap12bind:address location="https://localhost/WebServices/ws/1c_wstest.1cws"/>
</port>
</service>
</definitions>

Клиентская часть будет содержать чуть больше кода. Можно обращаться к сторонним сервисам двумя способами:

— использовать ws-ссылку (объект метаданных)

— создать ws-определение программно

Первый способ означает, что нам нужна ещё одна конфигурация, поэтому сейчас используем второй. Разница лишь в том, что мы создадим объект программно.

Создадим новую обработку с реквизитом Name, разместим его на форме, добавим форме команду Тест с двумя поцедурами, на клиенте и на сервере.

&НаСервере
Процедура ТестНаСервере()

ссл = Новый ЗащищенноеСоединениеOpenSSL;
всОпред = Новый WSОпределения("http://localhost/WebServices/ws/1c_wstest.1cws?wsdl","Admin","123",,,ссл);
всПрокси = Новый WSПрокси(всОпред, "http://localhost/WebServices/", "WebServiceTest", "WebServiceTestSoap",,,ссл);
всПрокси.Пользователь="Admin";
всПрокси.Пароль="123";

пакет = всПрокси.ФабрикаXDTO.Пакеты.Получить("http://www.w3.org/2001/XMLSchema");
типВС_Параметра = пакет.Получить("Name");

пИмя = ?(ЗначениеЗаполнено(Объект.Имя), Объект.Имя, "Name");  //передаваемая Строка должна быть непустая
всПараметр = всПрокси.ФабрикаXDTO.Создать(типВС_Параметра, пИмя);


Значение = всПрокси.GetHelloString(всПараметр);

Сообщить(Значение);



КонецПроцедуры

&НаКлиенте
Процедура Тест(Команда)
ТестНаСервере();
КонецПроцедуры

Параметры конструктора объекта WSПрокси ИмяСервиса и ИмяТочкиПодключения можно найти в XML-тексте, который возвращает наш сервис по URI https://localhost/WebServices/ws/1c_wstest.1cws?wsdl

А именно в элементе <service name=»ИмяНашегоСервиса»>

где ИмяСервиса — это атрибут Name этого элемента, то есть <service name=»WebServiceTest»>

ИмяТочкиПодключения — это атрибуты Name вложенных элементов

<port><port/>

Обычно мы имеем две точки для разных версий SOAP, в нашем случае они называются

WebServiceTestSoap и WebServiceTestSoap12 — можно использовать любой из них.

Сохраняем изменения в обработке, открываем её в любой базе и тестируем. Результат — вывод сообщения возвращенной операцией нашего удаленного сервиса строки. (Рис. 4)

Рис. 4

Продолжение в следующей части.

Понравилась статья? Поделить с друзьями:
  • Ошибка выход 106
  • Ошибка выделения байт памяти simcity
  • Ошибка в3060 шевроле круз
  • Ошибка высокий уровень сигнала датчика распределительного вала
  • Ошибка во время исполнения java