Имя: Пароль:
1C
1С v8
Как побороть ошибку с объектом WinHttp?
0 katerinaUniv
 
15.11.19
11:32
Добрый день.
В конфигурации на базе УПП работают два подключения через Comобъект WinHTTP. Один сервис работает исправно, а вот при создании второго выходит сообщение в отладчике, что объект не может быть создан повторно. Я так понимаю, что после работы нужно как-то закрывать такое соединение, но не могу найти как. Помогите, кто знает.
1 d4rkmesa
 
15.11.19
11:42
(0) Код покажите?
2 katerinaUniv
 
15.11.19
11:47
ТекстXML = "<soapenv:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""; xmlns:xsd=""http://www.w3.org/2001/XMLSchema""; xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:soap=""https://www.bic.infodebit.md/soap"">;
    |<soapenv:Header/>
    |<soapenv:Body>
    |   <soap:infodebit_report soapenv:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">;
    |      <idnp xsi:type=""xsd:string"">"+idnp_+"</idnp>
    |      <user xsi:type=""xsd:string"">d_balaur</user>
    |      <pass xsi:type=""xsd:string"">PJvKYkjw2M</pass>
    |      <bicinfo_requested xsi:type=""xsd:integer"">?</bicinfo_requested>
    |      <fisc xsi:type=""xsd:integer"">1</fisc>
    |      <scoring xsi:type=""xsd:integer"">1</scoring>
    |      <call_basis xsi:type=""xsd:string"">"+call_basis_+"</call_basis>
    |      <call_data xsi:type=""xsd:date"">"+call_data_+"</call_data>
    |      <call_reason xsi:type=""xsd:string"">"+call_reason_+"</call_reason>
    |      <credit_amount xsi:type=""xsd:float"">"+credit_amount_+"</credit_amount>
    |      <credit_term xsi:type=""xsd:integer"">"+credit_term_+"</credit_term>
    |   </soap:infodebit_report>
    |</soapenv:Body>
    |</soapenv:Envelope>";
    
    Таймаут = 30000;
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.SetTimeouts(Таймаут, Таймаут, Таймаут, Таймаут);
    
    WinHttp.Option(2,"utf-8");                           
    WinHttp.Open("POST","http://(адрес сайта)/soap/1_report.php?wsdl");    
    
    WinHttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");
    Попытка  
        WinHttp.Send(ТекстXML);
        Если WinHttp.Status = 200 Тогда
            Строка = WinHttp.ResponseText;
            //Файл = Новый ЗаписьТекста("D:\Задачи\tempxml.xml");
            Файл = Новый ЗаписьТекста(КаталогВременныхФайлов()+"tempxml.xml");
            Файл.ЗаписатьСтроку(Строка);
            Файл.Закрыть();
            //ПрочитатьXMLфайл(КаталогВременныхФайлов()+"tempxml.xml");
            ПрочитатьXMLфайл(Строка);
        Иначе
            ЭлементыФормы.Error.Заголовок = "Неверный статус ответа! Проверьте данные.";
        КонецЕсли;
        
    Исключение
        ЭлементыФормы.Error.Заголовок = "Отправка данных не удалась. Проверьте соединение.";
    КонецПопытки;
3 Kigo_Kigo
 
15.11.19
11:52
WinHttp = "";
Не закрывает соеденение?
4 acht
 
15.11.19
12:04
(2) Приведи полный текст ошибки.

И да:
>  Файл = Новый ЗаписьТекста(КаталогВременныхФайлов()+"tempxml.xml");

Как ты думаешь, что произойдет, если два пользователя одновременно выполнят этот кусок кода?
5 DrWatson
 
15.11.19
12:05
Почему люди используют Comобъект WinHTTP вместо нативного HTTPСоединение? ComОбъект лучше, быстрее? Зачем?
6 katerinaUniv
 
15.11.19
12:10
Это чужая обработка, с которой я сейчас разбираюсь
7 katerinaUniv
 
15.11.19
12:11
(5) использование HTTPСоединения поможет избежать такой проблемы?
8 d4rkmesa
 
15.11.19
12:31
(7) Скорее всего, да.
9 d4rkmesa
 
15.11.19
12:32
(5) Для совместимости с платформой 8.2, где не поддерживается HTTPS.
10 d4rkmesa
 
15.11.19
12:39
(3) Вообще, по идее, даже это не требуется. Хз, может тут какие-то нюансы, ну навроде платформа 64бит, а com-компонента - 32.
11 Kigo_Kigo
 
15.11.19
12:43
(10) Может быть после закрытия формы- да, до закрытия скорее всего болтается, а так как там регламент задание, то вообще фиг его знает как себя ведет, по этому можно попробовать принудительно, и да после (3) соеденение может до 30 сек болтаться
12 Ёпрст
 
15.11.19
12:46
(5) смотря, какая версия платформы.. мот у него 8.1
13 katerinaUniv
 
15.11.19
15:40
(12)у нас 8.2
14 DrWatson
 
15.11.19
15:52
Пробовали (8)?
HTTPСоединение доступен, начиная с версии 8.0.
15 Сияющий в темноте
 
15.11.19
23:40
Есть такой обьект ServerXMLHttpRequest
решает проблемы защищенного соединения и в отличие от тупого обьекта в 1с он асинхронный,то есть можно отправить запрос,а потом в фоне ждать на него ответ,что встроенный обьект HttpСоединение не умеет.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс