Имя: Пароль:
1C
1С v8
Подключение к Web-сервису стороннего разработчика (не 1С)
0 yurii-syrkin
 
11.10.13
08:19
Всем здравствуйте. В общем немного прояснилось, оказывается стандартный механизм платформы (WS ссылка) на данный момент как я понимаю имеют ограниченный функционал для работы с soap. Далеко не каждый wsdl способен определиться, пусть даже в soap ui проблем с ним не возникает. У 1С на этот счет свои требования, о которых мне в результате двухнедельных боев так и не посчастливилось узнать. Теперь вопрос в следующем: как мне подключиться через COM к web-сервису. Операционная система windows 2008 r2 поэтому MSSOAP.SoapClient30 никак не получается воспользоваться, может что не так делаю, вылетает с ошибкой "класс не зарегистрирован"
1 Asmody
 
11.10.13
08:26
(0) веб-сервис, видимо, на java?
Можно взять wsdl, допилить до вида, который прожует 1С, но это долго и муторно.
Можно написать "прослойку" на чем-то, что понимает ws с той стороны и устроит 1С
2 shuhard
 
11.10.13
08:33
3 yurii-syrkin
 
11.10.13
08:34
wsdl я допиливал, только пришлось убирать теги, которые отвечают за авторизацию. Видимо именно со способами авторизации у 1С не все хорошо. А вот с прослойкой это интересно. Под силу ли это 1С программисту?)
4 yurii-syrkin
 
11.10.13
10:07
(2) А вы сами пробовали этим пользоваться? Может чего не понимаю, но я скачал, поставил, посмотрел мануал, эти два общих модуля ни слова про soap, ни слова про wsdl. Что это такое не пойму. http get и post они и без этого работают. Кому интересно это пригодится. Сейчас еще посмотрю, конечно
5 Смотрящий от 1С
 
11.10.13
10:10
(0) если не секрет с каким внешним сервисом возитесь? Я сам бодаюсь с одним уже недели три
6 yurii-syrkin
 
11.10.13
10:18
(5)Заказчики говорили это конфиденциально, хотя ничего такого в принципе, но вы бы все равно не смогли его открыть в браузере, там ограничение по ip-адресам установлено. На всякий случай писать не буду, вдруг в поиск зададут) На сколько сильно продвинулись? Что перепробовали?
7 yurii-syrkin
 
11.10.13
10:24
Вот концовка wsdl, без которой все определяется:
</wsdl:binding>
- <wsdl:service name="GarbageRouteService">
- <wsdl:port binding="tns:GarbageRouteServiceSoapBinding" name="GarbageRouteServiceImplPort">
  <soap:address location="http://ods.fors.ru:80/garbageRoute/garbageRouteWebService"; />
  </wsdl:port>
  </wsdl:service>
- <wsp:Policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"; wsu:Id="UsernameToken" xsi:schemaLocation="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702 http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/ws-securitypolicy-1.2.xsd">;
- <wsp:ExactlyOne>
- <wsp:All>
- <sp:SupportingTokens>
- <wsp:Policy>
- <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">;
  <wsp:Policy />
  </sp:UsernameToken>
  </wsp:Policy>
  </sp:SupportingTokens>
  </wsp:All>
  </wsp:ExactlyOne>
  </wsp:Policy>
  </wsdl:definitions>
8 yurii-syrkin
 
11.10.13
11:15
Хорошо. К примеру  я убрал эти теги, у меня ws ссылка нормально определилась в конфигураторе. Почему у меня вылетает ошибка на строке WSСсылки.WS_АСУ_ОДС.СоздатьWSПрокси("
Ошибка по причине:
Сервис не найден.
9 Смотрящий от 1С
 
11.10.13
11:16
(7) не мой, вижу)). Где то встречал статью Гения1С, он там писал, про то, что 1С не любит Policy в WSDL
10 yurii-syrkin
 
11.10.13
11:28
Да, я тоже читал, благодаря этому и смог хоть как-то загрузить этот wsdl. Только теперь при создании ошибка лезет. Вообще, конечно, не понятно, возможно ли такое, что в 1С один wsdl, а там на web-сервисе другой, пусть не на много, но отличный. Будет это работать или нет?
11 Balonbl4
 
11.10.13
12:07
Будь мужиком!
Сформируй xml "руками" и скорми его сервису POST запросом
12 Serginio1
 
11.10.13
12:12
13 Leksus
 
11.10.13
12:16
(11) плюсану
14 Serginio1
 
11.10.13
13:54
(8) Ты секцию service то оставь
Удали только то, что после нё.
15 yurii-syrkin
 
11.10.13
15:18
Выдает: "Internal Server Error" на строке: Сообщить("" + xmlHttp.statusText);
16 yurii-syrkin
 
11.10.13
15:20
hostName ставлю ip адрес сервера, а urlAddress - значение soap:address location из WSDL. Правильно?
17 Serginio1
 
11.10.13
15:27
(16) да
18 Serginio1
 
11.10.13
15:30
У меня был один сайт так я его через сборку .Net использовал
v8: Вопрос по NetObjectToIDispatch

Сейчас с 7.7 буду использовать.
19 yurii-syrkin
 
11.10.13
17:07
Вообще, конечно MSXML2.xmlHttp это то что нужно в моем случае, но что я похоже не так делаю:

DOC=New COMОбъект("MSXML2.DOMDocument");
    DOC.loadXML(ТекстЗапроса);
    
    If DOC.parseError.errorCode <> 0 Then
        Сообщить("Ошибка разбора XML " + DOC.parseError.reason);
        Возврат;
    EndIf;
    DOC.save(КаталогФайловОбмена + "\2.xml");
    
    hostName="212.5.79.138";
    urlAddress="http://ods.fors.ru:80/garbageRoute/garbageRouteWebService/";;
    Состояние("Выполнение запроса..." + hostName);
    xmlHttp = New COMОбъект("MSXML2.xmlHttp");
    xmlHttp.OPEN("GET", urlAddress, False);
    // False- отвечает за то, что запррос асинхронный и ожидаем ответа

    
    xmlHttp.setRequestHeader("Host", hostName);
    xmlHttp.setRequestHeader("Content-type", "application/soap+xml; charset=""utf-8""");
    xmlHttp.SEND(DOC);
    Сообщить("" + xmlHttp.statusText);
    DOCToSave=New COMОбъект("MSXML2.DOMDocument");
    DOCToSave.loadXML(xmlHttp.responseText);
    If DOCToSave.parseError.errorCode <> 0 Then
        Сообщить("Ошибка разбора XML результата: " + DOC.parseError.reason);
        //Возврат;
    EndIf;
    DOCToSave.save(КаталогФайловОбмена + "\GetData.xml");

на строке Сообщить("" + xmlHttp.statusText); ошибка 500, текст ошибки Internal Server Error и xmlHttp.responseText = <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>No binding operation info while invoking unknown method with params unknown.</faultstring></soap:Fault></soap:Body></soap:Envelope>. Что не так?
20 Serginio1
 
11.10.13
17:16
21 yurii-syrkin
 
11.10.13
22:13
(20) Это безусловно очень важная и интересная информация и я её себе сохранил на всякий случай, но как мне воспользоваться этим для решения своих проблем?
22 Serginio1
 
12.10.13
00:46
Попробуй воспользоваться C#. А прочитать стоит, что бы понять, что напрямую соединиться не получится
23 yurii-syrkin
 
12.10.13
00:56
Да вот я уже тоже сейчас в этом направлении работаю. Никогда не приходилось сталкиваться, а тут на тебе. Учитывая мой исключительно 1С-овский уклад, мне похоже непросто придется, да?) Я так понял надо написать внешнюю компоненту и обращаться к ней из 1С?
24 Serginio1
 
12.10.13
11:45
(23) Нет не надо. Нужно сделать сборку с подключением к Вэб сервису. А затем через  v8: Вопрос по NetObjectToIDispatch через COM использовать её обернув объекты через AutoWrap.

Заходишь в Вижуал студию,Создаешь библиотеку, добавляешь ссылку на службу (совместимость с 2.0) Добавляешь класс который возвращает объект соединения обернутый в AutoWrap

[ComVisible(true)]
    [ProgId("ИмяТвоегоПрогИД")]
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [Guid("Создаешь свой ГУИД")]
    public class ИмяТвоегоКласс//    {


        public object Подключиться()
        {
            return new AutoWrap(new   ПодключениеКТвоемуВэбСервису);
        }


А с этим объектом работаешь из 1С как с COM объектом
25 Serginio1
 
12.10.13
11:56
Можно и без совместимости
26 yurii-syrkin
 
23.10.13
16:17
В общем, ребят, удалось все таки повлиять на разработчиков веб сервиса, чтобы они изменили способ аутентификации. 1С принимает только базовый способ.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший