Имя: Пароль:
1C
 
Ошибка публикации веб сервиса, 1C:Enterprise 8 application error
0 pocketbeast
 
09.09.24
10:53
Всем добрый день! Помогите, пожалуйста, разобраться с проблемой. Весь интернет уже перевернул вверх дном, но так и не нашел решения.

Вручную публиковал веб сервис на сервере, вроде бы все делал правильно, но при переходе на wsdl-структуру, появляется такая ошибка:

1C:Enterprise 8 application error:
Error in virtual resources descriptor distribution
by reason:
Error converting XDTO data: PropertyStart: {http://v8.1c.ru/8.2/virtual-resource-system}accessTokenRecepientName Form: Item Type: {http://www.w3.org/2001/XMLSchema}anyType

Я понимаю, что дело в каком-то XDTO-пакете, но если я его убираю из веб сервиса, то ошибка остается такой же.

Более подробно опишу проблему в сообщении ниже
1 pocketbeast
 
09.09.24
11:16
Ситуация следующая: есть два сервера, один основной, а другой нужен для того, чтобы к нему можно получить доступ из вне. На основном сервере есть рабочая база, самописная, версия платформы 8.3.15.1656. На "внешнем" сервере стоит линукс. На нем версия платформы 1с 8.3.24. Необходимо, сделать публикацию веб сервиса с основной базы на внешнем сервере. Понятно, что из-за разных версий платформы сделать такое нельзя, поэтому на внешний сервер установлен отдельно 1с сервер версии 8.3.15.1656. Не стали полностью ставить технологическую платформу, потому что старые версии платформы заставить установиться на линукс - это ад.

Кроме того, на внешнем сервере установлен апач 2.4. А вернее, через setup-instance две его копии (потому что на этом самом внешнем сервере есть необходимость, чтобы работало два сервера 1с, как раз 8.3.24 и 8.3.15). Порты я раскидал, с ними все работает, но при поптыке опубликовать вручную веб сервис по вот этому гайду: http://www.alsigned.ru/?p=416 появляется следующая ошибка при переходе на wsdl ссылку веб-сервиса

1C:Enterprise 8 application error:
Error in virtual resources descriptor distribution
by reason:
Error converting XDTO data: PropertyStart: {http://v8.1c.ru/8.2/virtual-resource-system}accessTokenRecepientName Form: Item Type: {http://www.w3.org/2001/XMLSchema}anyType

конфиг 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="/EquipmentService"
				ib="Srvr="kraft";Ref="1s83";">
		<ws>
				<point name="EquipmentService"
								alias="EquipmentService.1cws"
								enable="true"
								reuseSessions="autouse"
								sessionMaxAge="20"
								poolSize="10"
								poolTimeout="5">
						<accessTokenAuthentication>
								<issuers/>
								<accessTokenRecepientName/>
						</accessTokenAuthentication>
				</point>
		</ws>
		<standardOdata enable="false"
						reuseSessions="autouse"
						sessionMaxAge="20"
						poolSize="10"
						poolTimeout="5"/>
</point>


конфиг апача:
LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap24.so"

# 1c publication
Alias "/EquipmentService" "/var/www/EquipmentService/"
<Directory "/var/www/EquipmentService/">
	AllowOverride All
	Options None
	Require all granted
	SetHandler 1c-application
	ManagedApplicationDescriptor "/var/www/EquipmentService/default.vrd"
</Directory>
2 pocketbeast
 
09.09.24
15:03
up
3 spiller26
 
09.09.24
15:09
(2) Ну ничего адского нет, чтобы 2 платформы работали в линух, старую скопировать в другую папку и нужно другие порты прописать.
4 spiller26
 
09.09.24
15:14
Права на папку, где vrd давал 777?
5 pocketbeast
 
09.09.24
15:24
(4) да, давал. Так дело же, как я понял из описания ошибки, в другом все-таки.

Error converting XDTO data: PropertyStart: {http://v8.1c.ru/8.2/virtual-resource-system}accessTokenRecepientName Form: Item Type: {http://www.w3.org/2001/XMLSchema}anyType. Вот он не может переконвертировать почему-то вот это: accessTokenRecepientName. В vrd веб-сервиса я нашел тег с таким же названием и попробовал его удалить. Но после этого при переходе по ссылке на wsdl структуру, происходит бесконечная загрузка
6 spiller26
 
09.09.24
15:27
(1) Вы видели что публикация статьи "Июл 25, 2010"?
Поищите поновее.
Apache уже 2.4 давно и там немного по другому.
7 pocketbeast
 
09.09.24
15:30
(6) видел, пользовался в том числе и этой: https://renbuar.blogspot.com/2020/05/apache-1.html (там как раз и про создание двух копий апача расписано), но неудача все равно настигла
8 spiller26
 
09.09.24
15:32
(5) Снесите и заново всё сделайте на apache 2.4.
Ищите что-то подобное:
"1c web сервер ubuntu 22 настройка" или "1c web сервер ubuntu 24 настройка"
https://dzen.ru/a/Y3Xu6l0t1WaBwglg
https://its.1c.ru/db/metod8dev/content/5979/hdoc
9 spiller26
 
09.09.24
15:36
(7) Сделайте 2 разных web сервера 1c, они весят мало.
10 pocketbeast
 
09.09.24
15:38
(8) Вы правы. Я очень не хотел этого делать, надеялся, что получится обойтись без переустановки. Но, судя по всему проблема даже не в публикации, а именно где-то в апаче. Спасибо, сейчас и попробую
11 spiller26
 
09.09.24
15:45
(10) Лучше уже заново всё сделать а не "выковыривать старое".
12 pocketbeast
 
09.09.24
16:50
всё заработало!!!

Во время переустановки пользовался в большей степени вот этой статьей: https://renbuar.blogspot.com/2020/05/apache-1.html. Особое внимание стоит обратить на момент, где для апача отключается mpm_event и подключается mpm_worker. В первый раз я этого не делал. Так что, полагаю, ошибка была в этом.

Надеюсь, кому-нибудь поможет.
13 pocketbeast
 
09.09.24
17:15
забыл еще добавить, что по умолчанию при публикации через команду он будет создавать vrd файл, в котором не будет записан тег "ws". Из-за этого при попытке зайти на ссылку с wsdl структурой веб сервиса, будет выкидывать ошибку 404. Это потому, что в vrd не описаны сами сервисы, которые должны быть включены. По идее там надо описывать сервисы вот в таком виде:

<ws pointEnableCommon="false">
                <point name="EquipmentService"
                                
                              alias="EquipmentService.1cws"
                              enable="true"
                              reuseSessions="autouse"
                              sessionMaxAge="20"
                              poolSize="10"
                              poolTimeout="5">
                        <accessTokenAuthentication>
                              <issuers/>
                              <accessTokenRecepientName/>
                        </accessTokenAuthentication>
                </point>
</ws>

НО! У меня заработало даже если просто внести пустой тег. Вот так:

<ws></ws>

Главное, вносить его надо перед тегом "standardOdata"
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс