powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Вызов внешнего веб-сервиса
10 сообщений из 10, страница 1 из 1
Вызов внешнего веб-сервиса
    #35039451
ktv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу скажу - я не 1с-ник.
Коллеги, подкиньте, плиз, код или ссылку на предмет вызова из 8-ки внешнего веб-сервиса.
К примеру:

http://localhost/test_1c_ws/Service1.asmx?WSDL
метод Int32 add(Int32)

Наши застопорились что-то (
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35039538
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ktvСразу скажу - я не 1с-ник.

Аналогично.

ktv
Коллеги, подкиньте, плиз, код или ссылку на предмет вызова из 8-ки внешнего веб-сервиса

Не уверен, есть ли встроенный функционал в 1C, однако, если я ничего не путаю, там есть возможность работать со сторонними COM-библиотеками. Поэтому самым простым решением мне представляется использование MS SOAP Toolkit .

ktvК примеру:

http://localhost/test_1c_ws/Service1.asmx?WSDL
метод Int32 add(Int32)

Ваш пример на VBScript (увы, я не знаю языка 1C) выглядел бы так:
Код: plaintext
1.
2.
3.
set soap = CreateObject("MSSOAP.SoapClient30")
soap.mssoapinit("http://localhost/test_1c_ws/Service1.asmx?WSDL")
result = soap.add( 2345 )

Надеюсь, это поможет.
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35039950
ktv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю, проясню ситуацию с COM-ом. С ним работали какое-то время, код был примерно такой.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Процедура Кнопка1Нажатие(Элемент)
       Сервис = Новый COMОбъект("MSSOAP.SoapClient"); 
       
      //MS SOAP Toolkit  3 . 0  набор средств бесплатно скачанного с сайта Майкрософт. 
      Сервис.MSSoapInit("http://host/test_1c_ws/Test_1c_Service.asmx?WSDL");
      Сервис.ClientProperty("UseUTF8InHeader = true");
      Сервис.MSSoapInit("http://host/testEncoding/service.asmx?wsdl");
      Сервис.MSSoapInit("http://host/test_1c_ws/Service1.asmx?wsdl"); 
      НовСтрока = Новый ДвоичныеДанные("C:\Текстовый документ.txt");
      Результат = Сервис.sendData(НовСтрока); //Метод Add веб-сервиса. Возвращает целое число                
                ////русскую запись не расшифровывает 
                //            //XMLСтрока() не помогла  1115   1116 
                //            //Base64Строка() возвращает пустое значение  1117 
                //            //String не помогла  1118 
                //Сообщить("Результат = " + Результат);
                //
                ////Результат = Сервис.InsertEquipmentMaterial("проба2"); 
                ////Результат = Сервис.Add("Проба2"); 
                ////Сообщить("Результат_2 = " + Результат); 

Резюме - возникали проблемы с кодировкой. На сороне сервиса принималась какя-то ерунда в вде
"?????". Сервис висит на Win2003 Server(инг.). Посему был попробован другой путь, описанный ниже
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        //Сервис.MSSoapInit("http://host/test_1c_ws/Service1.asmx?wsdl"); 
                //Srv = WSСсылки.WSСсылка3.СоздатьWSПрокси("http://tempuri.org/", "SynchronizerSoap", "SynchronizerSoap12");                                              
                //Srv = WSСсылки.WSСсылка3.СоздатьWSПрокси("http://host/StaffSynchronizer/", "SynchronizerSoap", "SynchronizerSoap12");
                
                //Srv = Новый WSПрокси(Новый WSОпределения("http://host/StaffSynchronizer/Synchronizer.asmx"),"\\host\StaffSynchronizer\", "SynchronizerSoap", "SynchronizerSoap12");
                
                //Srv = WSСсылки.WSСсылка3.СоздатьWSПрокси("http://host/StaffSynchronizer/", "SynchronizerSoap", "SynchronizerSoap12");                                              
                Srv = WSСсылки.WSСсылка3.СоздатьWSПрокси("http://tempuri.org/", "SynchronizerSoap", "SynchronizerSoap12");                                              
                               
                Результат = Srv.addAppointment("тест","   ");
                Сообщить(Результат);
                                               
КонецПроцедуры

И вот этот второй путь он не работает. Не хочет он видеть методы сервиса. 1c-ники говорят, что
провобвали и htp://...?wsdl подставлять - не выходит ничего...
Я не могу прояснить код - те. кто шарит - поскажите, куда копать-то..
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35040032
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ktvБлагодарю, проясню ситуацию с COM-ом. С ним работали какое-то время, код был примерно такой.

К сожалению, я не знаю что должен делать Ваш сервис, поэтому определить что не работает я с ходу не могу.

Могу предположить, что вам нужно передать содержимое некоего файла и получить результат.
Для начала я предлагаю все-таки остановиться на первоначальном варианте, благо он вполне рабочий.
А чтобы определить в чем же собственно проблема (не исключено, что проблема в сервисе), давайте попробуем передать ваш файл без помощи 1С вообще.

Выполните вот такой код (это VBScript):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set soap = CreateObject("MSSOAP.SoapClient30")
soap.mssoapinit("http://host/test_1c_ws/Service1.asmx?wsdl")
set StreamIn = CreateObject("ADODB.Stream")
StreamIn.Type =  1 
StreamIn.Open
StreamIn.LoadFromFile("C:\Текстовый документ.txt")
in_array = StreamIn.Read(- 1 )
Result = Soap.A(in_array)
WScript.Echo(Result)

А еще, покажите, наконец, сигнатуру того метода сервиса, в котором у Вас проблема, и что Вы там делаете, что у Вас выдаются знаки вопроса. В общем, нужен код метода сервиса.
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35040245
ktv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот сам веб-метод. Tracer - это мой объект для логирования в EventLog виндовый.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 [WebMethod]
        public Int32 Add(String name)
        {
            Tracer tr = new Tracer("Test1c");
            tr.TraceInformation("from 1c: " + name);

            SqlConnection conn = new SqlConnection(connectionStringSql);
            conn.Open();
            
            SqlCommand cmd = new SqlCommand("exec AddTown @townName, 1, @newID output", conn);

            cmd.Parameters.Add("@townName", SqlDbType.VarChar);
            cmd.Parameters["@townName"].Value = name;

            cmd.Parameters.Add("@newID", SqlDbType.Int);
            cmd.Parameters["@newID"].Direction = ParameterDirection.Output;

            int cnt = cmd.ExecuteNonQuery();
            int id = Convert.ToInt32(cmd.Parameters["@newID"].Value);

            return id;
        }


Это оседает в логе - после вызова метода из 1с

Код: plaintext
1.
2.
3.
4.
5.
Event Type:	Information
Event Source:	Test1c

Description:
from 1c: ????????

, а это
Код: plaintext
1.
2.
3.
4.
5.
Event Type:	Information
Event Source:	Test1c

Description:
from 1c: тест

после вызова из vs2005

Очевидно, что метод получает строку в нверной кодировке..
На сторое 1с - Юникод - какой - не знаю. ВИндовая кодировка - стандартная 1251.
.. По коду видно, что оно идет в БД, там тож вопросы стоят, из 1с когда вызов..
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35040611
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я попробовал воспроизвести вашу ошибку.

Результаты следующие:
- да Вы правы строка передается в виде UTF-8 строки
- передается в UTF-8 независимо от того откуда я вызываю: хоть через MSSOAP, хоть из .Net клиента (почему у Вас разные результаты - загадака).

Общая мысль, следующая - если для передачи происходит явная перекодировка, то вернуть исходную кодировку можно только принудительно. Попробуйте делать явное приведение кодировки из UTF-8.

Другой вопрос, почему не все клиенты работают одинаково...
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35040630
ktv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРЯ попробовал воспроизвести вашу ошибку.

Результаты следующие:
- да Вы правы строка передается в виде UTF-8 строки
- передается в UTF-8 независимо от того откуда я вызываю: хоть через MSSOAP, хоть из .Net клиента (почему у Вас разные результаты - загадака).

Общая мысль, следующая - если для передачи происходит явная перекодировка, то вернуть исходную кодировку можно только принудительно. Попробуйте делать явное приведение кодировки из UTF-8.

Другой вопрос, почему не все клиенты работают одинаково...
Я думал про перекодировку, заставлю попробовать умников..
Запарило ( - не смовим делом занимаюсь
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #35040635
ktv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за участие )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вызов внешнего веб-сервиса
    #36197223
Aikam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Na komputere gde rabotaet client Web servica ustanovite soap toolkit 3.0
2. Posle etogo client uvidet method
Vot primer koda :

Dim oSOAP
'Create an object of Soap Client
Set oSOAP = Server.CreateObject("MSSOAP.SoapClient30")
oSOAP.ClientProperty("ServerHTTPRequest") = True
'Initaialize the Web Service
oSOAP.mssoapinit("http://kuku/WS/abc.asmx?wsdl")
'Invoke the Web Service
result = oSOAP.Activate("aa", "ss", "tratata")
...
Рейтинг: 0 / 0
Вызов внешнего веб-сервиса
    #36199745
ktv,

Какая 8-ка? = 8.1?
Если 8.1 то...

Процедура ВызватьМетодWebСервиса(ПараметрыПодключения)

Попытка
Определение = Новый WSОпределения(ПараметрыПодключения.WSDL, ПараметрыПодключения.Login, ПараметрыПодключения.Pwd);
WSПрокси = Новый WSПрокси(Определение, ПараметрыПодключения.URI, ПараметрыПодключения.Name, ПараметрыПодключения.Port);
WSПрокси.Пользователь = ПараметрыПодключения.Login;
WSПрокси.Пароль = ПараметрыПодключения.Pwd;
//
XDTOРезультат = WSПрокси.<ИмяМетода>(XDTOПараметр1, XDTOПараметр2...);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

КонецПроцедуры // ВызватьМетодWebСервиса()

Здесь просто вызывает
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Вызов внешнего веб-сервиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]