Ошибка при вызове метода контекста веб сервис

04.05.2022

В некоторых случаях при обмене с контролирующими органами возникает следующая ошибка (текст из журнала регистрации):

{Обработка.ДокументооборотСКонтролирующимиОрганами.МодульОбъекта(66473)}: Ошибка при вызове метода контекста (ReceiveUpdatedPacket)

XDTOРезультат = Сервис.ReceiveUpdatedPacket(Строка(ИдентификаторАбонента),ДатаОбновленияФайлаНаСервере);

по причине:

При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://regservice.keydisk.ru/}:RegService:ReceiveUpdatedPacket()

по причине:

При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка работы с Интернет: Удаленный узел не прошел проверку

по причине:

Ошибка работы с Интернет: Удаленный узел не прошел проверку

Способ исправления:

1. Необходимо закрыть программу 1С.

2. В папке с платформой найти файл cacert.pem, скопировать его в любую папку на случай неудачной попытки.

3. Далее в папку с платформой залить новый файл cacert.pem с заменой.

    Архив файла cacert.pem для замены доступен по ссылке https://its.1c.ru/db/files/1CITS/EXE/cacert/cacert.zip

4. Запустить 1С и попробовать еще раз обменяться с контролирующими органами.

Возврат к списку

Ошибка при подключении к WEB сервису ☑ 0

oleg_prg

11.06.12

23:07

В чистой конфигурации 1С8.2 создал WEB сервис

при обращении из браузера по строке http://localhost:8080/ws/web1?wsdl все ок — получаю ответ от сервиса типа

<definitions xmlns=»http://schemas.xmlsoap.org/wsdl/» и т.д.

В 1С пишу

Процедура ЗапроситьВебСервис()

   
   Сообщить(«Попали!»);

   Сервис1 = WSСсылки.WSСсылка1.СоздатьWSПрокси(«http://localhost:8080/ws/»,»web1″, «web1Soap»);  //ЗДЕСЬ ОШИБКА!!!

   Сервис1.Пользователь = «Админ»;

   Сервис1.Пароль = «»;

   Ответ = «Получили: » + Сервис1.Получить(«тест»);

   
   Сообщить(Ответ);

{Обработка.ОбращениеЧерезWebСервис.Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (СоздатьWSПрокси)

   Сервис1 = WSСсылки.WSСсылка1.СоздатьWSПрокси(«http://localhost:8080/ws/»,»web1″, «web1Soap»);

по причине:

Сервис не найден. {http://localhost:8080/ws/}:web1

Как побороть???

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

1

oleg_prg

11.06.12

23:12

Параметр №1 в СоздатьWSПрокси делал таким

1 http://localhost:8080/ws/web1?wsdl

2 http://localhost:8080/ws/web1

3 http://localhost:8080/ws/

4 http://localhost:8080/ws

5 http://localhost:8080/

6 http://localhost:8080

7 http://localhost

Сервис реально работает, т.к. вот отрывки из ответа в браузере

<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=»ws» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsd1=»ws» xmlns:xsd2=»http://v8.1c.ru/8.1/data/core» xmlns:xsd3=»http://v8.1c.ru/8.2/virtual-resource-system» name=»web1″ targetNamespace=»ws»>

……….

<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xs1=»http://v8.1c.ru/8.1/data/core» xmlns:xs2=»http://v8.1c.ru/8.2/virtual-resource-system» xmlns:xs3=»ws» targetNamespace=»ws» elementFormDefault=»qualified»>

<xs:import namespace=»http://v8.1c.ru/8.1/data/core»/>

<xs:import namespace=»http://v8.1c.ru/8.2/virtual-resource-system»/>

<xs:element name=»Get1″>

<xs:complexType>

<xs:sequence/>

</xs:complexType>

</xs:element>

<xs:element name=»Get1Response»>

<xs:complexType>

<xs:sequence>

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

<xs:element name=»Param1″ type=»xs:string» nillable=»true»/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

</types>

<message name=»Get1RequestMessage»>

<part name=»parameters» element=»tns:Get1″/>

</message>

<message name=»Get1ResponseMessage»>

<part name=»parameters» element=»tns:Get1Response»/>

</message>

<portType name=»web1PortType»>

<operation name=»Get1″>

<input message=»tns:Get1RequestMessage»/>

<output message=»tns:Get1ResponseMessage»/>

</operation>

</portType>

<binding name=»web1SoapBinding» type=»tns:web1PortType»>

<soapbind:binding style=»document» transport=»http://schemas.xmlsoap.org/soap/http»/>

<operation name=»Get1″>

<soapbind:operation style=»document» soapAction=»ws#web1:Get1″/>

<input>

<soapbind:body use=»literal»/>

</input>

<output>

<soapbind:body use=»literal»/>

</output>

</operation>

</binding>

<binding name=»web1Soap12Binding» type=»tns:web1PortType»>

<soap12bind:binding style=»document» transport=»http://schemas.xmlsoap.org/soap/http»/>

<operation name=»Get1″>

<soap12bind:operation style=»document» soapAction=»ws#web1:Get1″/>

<input>

<soap12bind:body use=»literal»/>

</input>

<output>

<soap12bind:body use=»literal»/>

</output>

</operation>

</binding>

<service name=»web1″>

<port name=»web1Soap» binding=»tns:web1SoapBinding»>

<documentation>

<wsi:Claim xmlns:wsi=»http://ws-i.org/schemas/conformanceClaim/» conformsTo=»http://ws-i.org/profiles/basic/1.1″/>

</documentation>

<soapbind:address location=»/ws/web1″/>

</port>

<port name=»web1Soap12″ binding=»tns:web1Soap12Binding»>

<soap12bind:address location=»/ws/web1″/>

</port>

</service>

</definitions>

2

oleg_prg

11.06.12

23:24

ток что сделал по реально работающему примеру

Прокси = WSСсылки.НБРФ.СоздатьWSПрокси(«http://www.cbr.ru», «DailyInfo»,»DailyInfoSoap»);

Ссылка http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl

Опять таже ошибка

{Обработка.ОбращениеЧерезWebСервис.Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (СоздатьWSПрокси)

   Прокси = WSСсылки.НБРФ.СоздатьWSПрокси(«http://www.cbr.ru», «DailyInfo»,»DailyInfoSoap»);

по причине:

Сервис не найден. {http://www.cbr.ru}:DailyInfo

3

oleg_prg

11.06.12

23:30

Моя платформа 1С:Предприятие 8.2 (8.2.15.289)

4

oleg_prg

11.06.12

23:35

Тоже самое сделал в 1С:Предприятие 8.1 (8.1.15.14) — таже ошибка

5

oleg_prg

12.06.12

00:03

Решил!!!

6

IamAlexy

12.06.12

00:05

ну тогда пиши как решил уж..

7

oleg_prg

12.06.12

00:18

Ошибка была в строке подключения

СоздатьWSПрокси(«http://localhost:8080/ws/»,»web1″, «web1Soap»);

именно здесь http://localhost:8080/ws/

Надо в браузер ввести ссылку на вэб сервис, в данном случае это  http://localhost:8080/ws/web1?wsdl

затем в открывшемся описании в начале файла ищите вот что:

name=»web1″ targetNamespace=»1c»

в данном случае web1- это имя сервиса (параметр ;2), а 1с — это параметр №1

сейас моя строка подключения такая Сервис1 = WSСсылки.WSСсылка1.СоздатьWSПрокси(«1c»,»web1″, «web1Soap»);

Если надо подключиться к НБРФ http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl

то там параметр №1 это targetNamespace=»http://web.cbr.ru/»

Если у вас подключен сервис 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

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

Я уже как-то писал о муках разработки web service (веб сервисов) на C# (.NET) для 1С. Продолжаем разбираться с проблемами.

При разработке веб сервиса на C# под MS Visual Studio для 1С 8.2 столкнулись с невразумительной ошибкой. В качестве сервера — Microsoft-IIS/8.5. Поиск решения занял немало времени. 🙁 Но обо всем по порядку.

Название вызываемого метода веб сервиса — BarcodeFontIsInstalled. В качестве единственного аргумента передается строка.  Ошибка выглядит так:

{Форма.Форма.Форма(22)}: Ошибка при вызове метода контекста (BarcodeFontIsInstalled)

НоваяСтрока = Прокси.BarcodeFontIsInstalled(WSПараметр);

по причине:

Ошибка вызова операции сервиса: {http://tempuri.org/}:BarcodeWebService:BarcodeFontIsInstalled()

по причине:

Неизвестная ошибка. Ошибка разбора XML: - [1,1]

Фатальная ошибка:

Extra content at the end of the document

по причине:

Ошибка разбора XML: - [1,1]

Она ни о чем не говорит, поскольку 1С безбожно переврала то, что вернул IIS.

Обращение из 1С к web service (веб сервису)

Вызов метода из 1С производился как описано в статье. Код веб сервиса в C#:

using System.Web;

using System.Web.Services;

using System.Xml.Serialization;

namespace BarcodeWebService

{

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [System.ComponentModel.ToolboxItem(false)]

    public class BarcodeWebService : System.Web.Services.WebService

    {

        [WebMethod]

        public bool BarcodeFontIsInstalled(string fontName)

        {

            return BarcodeUtils.IsFontInstalled(fontName);

        }

    }

}

1C_web_service

Замечу, что вызов проходил через BarcodeWebServiceSoap — т.е. SOAP версии 1.1. BarcodeWebServiceSoap12 — соотвественно для работы через SOAP 1.2. 1C действительно меняет обращение к сервису, если вместо BarcodeWebServiceSoap указать BarcodeWebServiceSoap12, проверено опытным путем. 🙂

Вызов в 1С выглядел таким образом:

Прокси = WSСсылки.WSBarcodeService.СоздатьWSПрокси("http://tempuri.org/", "BarcodeWebService", "BarcodeWebServiceSoap");   

ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://tempuri.org/").Получить("BarcodeFontIsInstalled");

WSПараметр     = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);

WSПараметр.fontName = "Code 128";

НоваяСтрока = Прокси.BarcodeFontIsInstalled(WSПараметр);

Все делаем «по учебнику» но так не работает. 🙁

Отладка обращений 1С к web service (веб сервису)

Поскольку в 1С не понятно как отлаживать что-то в части работы с веб-сервисами, обращаемся за помощью к Fiddler, который покажет как-же 1С обращается к разработанному на C# web service:

Бросается в глаза странный кусок XML:

Зачем 1С сгенерировал для такого простого аргумента такую вложенную иерархию fontName не понятно. Ответ веб сервиса (MS IIS) на такую конструкцию:

HTTP/1.1 400 Bad Request

Cache-Control: private

Content-Type: text/xml; charset=utf-8

Server: Microsoft-IIS/8.5

X-AspNet-Version: 4.0.30319

X-Powered-By: ASP.NET

Date: Wed, 14 Oct 2015 10:19:14 GMT

Content-Length: 0

Как видно по ответу, ошибка выдаваемая 1С рядом не лежала с тем, что на самом деле вернул IIS, а он вообще не вернул XML, сообщив, что запрос «кривой» (HTTP/1.1 400 Bad Request).

Чтобы узнать какой request должен быть, пишем пару строк на C#:

BarcodeWebService.BarcodeWebService svc = new BarcodeWebService.BarcodeWebService();

checkBox1.Checked = svc.BarcodeFontIsInstalled("Code 128");

и запустив Fiddler видим какой простой и красивый request получается:

Расстраиваемся, поскольку ситуация выглядит тупиковой, но пытаемся найти решение.

Перехват обращений из 1С к web service (веб сервису) cbr.ru

Обратимся к исходной статье и посмотрим как выглядит request к web service (веб сервису) www.cbr.ru. Код 1С описан в статье, а request будет таким:

В данном случае все красиво, как при обращении из кода C#:

CBRWebService.DailyInfo info = new CBRWebService.DailyInfo();

DataSet ds = info.GetCursOnDate(DateTime.Now);

Разбираться в WSDL, который генерирует веб сервис «Центробанка» и разработанный мною на .NET — дело неблагодарное, тем более, что даже поняв ошибку в генерации 1С request к внешнему веб сервису, повлиять на это нельзя, нужно ждать обновления платформы. Чтобы проверить одну мысль я сделал простой метод в веб сервисе:

[WebMethod]

public DateTime Checker(DateTime date)

{

    return date;

}

У меня была мысль, что проблема связана с тем, что string аргумент может быть null, соответственно, в WSDL minOccurs=»0″, в отличие от DateTime (который передавался cbr.ru методу GetCursOnDate), для которого minOccurs=»1″ . Однако, даже для такого варианта 1С сформировал столь же «кривой» запрос, т.е. дело не в этом.

Решение

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

Итак, фанфары, рабочий код на 1С при обращении к внешнему веб сервису (web service) написанному на C# (.NET) и работающему под IIS  выглядит следующим образом:

Прокси = WSСсылки.WSBarcodeService.СоздатьWSПрокси("http://tempuri.org/", "BarcodeWebService", "BarcodeWebServiceSoap");

Результат = Прокси.BarcodeFontIsInstalled("Code 128");

И это всё! 🙂 Предельно кратко и очень похоже на обращение к web service в C#. В этом случае перехваченный Fiddler-ом запрос 1С к веб сервису выглядит следующим образом:

При таком вызове web service (веб сервис) возвращает корректное значение. Ошибка исчезла. В качестве аргумента в метод веб сервиса из 1С передавали бинарные данные (фотографии), массивы, ну и простые типы, вроде даты, строки и пр.

Полезные ссылки

  • Fiddler — перехват http траффика для анализа обмена данными
  • WireShark — мощный сниффер для перехвата и анализа различных протоколов переадчи данных.
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2, "Windows-1251");
WinHttp.Open("POST", "http://mtscommunicator.ru/m2m/m2m_api.asmx/SendMessage", 0);

WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

ПараметрыPOST = "msid=" + Адресат + "&message=" + ПодготовитьСообщение(ТекстСМС) + "&naming=Mart-Stroy&login=9857279651&password=6C30734811916B0F0F24A4630B08036F";

Ошибка = Ложь;
ИДСообщения = "";

Попытка

WinHttp.Send(ПараметрыPOST);

ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();

Текст = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.UTF8);
Текст.ЗаписатьСтроку(WinHttp.ResponseText());
Текст.Закрыть();

Ошибка = (WinHttp.Status <> 200);

Исключение
Ошибка = Истина;
КонецПопытки;

Если НЕ Ошибка Тогда

Попытка

XMLОтвет = Новый ЧтениеXML;
XMLОтвет.ОткрытьФайл(ИмяФайлаЗапроса);

Пока XMLОтвет.Прочитать() Цикл
Если XMLОтвет.ТипУзла = ТипУзлаXML.НачалоЭлемента И (XMLОтвет.Имя = "long") Тогда
XMLОтвет.Прочитать();
ИДСообщения = XMLОтвет.Значение;
Прервать;
КонецЕсли;
КонецЦикла;

Исключение
Ошибка = Истина;
КонецПопытки;

КонецЕсли;

Если Ошибка Тогда
Сообщить("Не удалось отправить СМС. Проверьте настройки подключения");
Предупреждение("СМС не было отправлено");
Иначе

Набор = РегистрыСведений.ЛогОтправленныхСМС.СоздатьНаборЗаписей();
Набор.Отбор.Документ.Установить(Ссылка);
Набор.Прочитать();

ЗаписьЛога = Набор.Добавить();
ЗаписьЛога.Документ = Ссылка;
ЗаписьЛога.Получатель = ЭкспедиторЗагрузки;
ЗаписьЛога.Идентификатор = ИДСообщения;
ЗаписьЛога.Текст = ТекстСМС;
ЗаписьЛога.ТелефонПолучателя = Адресат;
ЗаписьЛога.Ответственный = глЗначениеПеременной("глТекущийПользователь");
ЗаписьЛога.ДатаОтправки = ТекущаяДата();
ЗаписьЛога.СтатусСМС = Перечисления.СтатусыСМС.ПоставленоВОчередь;
Набор.Записать(Истина);

ПоказатьОповещениеПользователя("Отправка СМС",, "СМС-сообщение отправлено " + Строка(ЭкспедиторЗагрузки), БиблиотекаКартинок.СМС);

КонецЕсли;

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста выполнить задачу
  • Ошибка получения метаданных aloha как исправить
  • Ошибка планар 3кв 3 раза моргает красным
  • Ошибка при вызове метода контекста вызватьhttpметод
  • Ошибка получения мандатных атрибутов на сервере для пользователя