Имя: Пароль:
1C
1С v8
использование веб-сервисов в 1С с процедурой авторизации
0 manaxov83
 
12.06.14
20:11
Всем привет, нужна помощь использования веб-сервисов в 1С.
Есть внешний веб сервис, в конфигураторе добавлил объект ws-ссылка, все ОК, получил дерево доступных методов и модель данных(логин и пароль не требовал).
Создаю прокси:

Прокси = WSСсылки.Service.СоздатьWSПрокси(URIПространстваИмен,ИмяСервиса,ИмяПорта);//все ОК

У каждого пользователя этого веб-сервиса есть учетка, для аутентификации есть метод Authmethod.

Рез=Прокси.Authmethod(Логин,Пароль);//
Метод возвращает строку "true"- из описания все ОК, аутентификация прошла.

Далее вызываю нужный мне метод:

Прокси.FindCompanyByCode(ИНН,"",0,Рез,Данные);
В переменной "рез" получаю строку "Authentication error". Вот тут то и запара, как будто аутентификации в системе не было.

Есть пример использования этого сервиса на C#, и прога на C# с моими учетными данными работает:

string result;
string resultXml;
using (ifaxWSReference.iFaxWebService service = new ifaxWSReference.iFaxWebService())
{
    service.Url = "url";
    service.CookieContainer = new System.Net.CookieContainer();
    result = service.Authmethod("<Login>", "<Password>");
    result = service.FindCompanyByCode("1833034704", "", 0, out resultXml);
    service.End();
}
Console.WriteLine("Result: " + result);
Console.WriteLine("Result XML: " + resultXml);


Интересна вот эта строка:
    service.CookieContainer = new System.Net.CookieContainer();

Зачем она? Есть ли что то подобное в 1С? Может быть это и есть ключ к моему решению, WS не запоминает что была утентификацию).

Так же пробывал пихать логин и пароль в поля прокси, но думаю что это чуть другое:
    Прокси.Пользователь = Логин;
    Прокси.Пароль = Пароль;

С сервисами работаю первый раз, так что прошу сильно не пинать)).
1 dj_serega
 
12.06.14
20:15
а что за ""Authentication error"."? это тебе сервер возвращает?
2 oleg_km
 
12.06.14
20:30
Эту строку:

    service.CookieContainer = new System.Net.CookieContainer();

можно проверить Fiddler'ом. Да и вообще сравни с фиддлером свою прогу на шарпе и 1С
3 manaxov83
 
12.06.14
22:16
а что за ""Authentication error"."? это тебе сервер возвращает?

Да, это результат выполнения процедуры FindCompanyByCode записываемый в выходной параметр Рез.

Эту строку:
    service.CookieContainer = new System.Net.CookieContainer();

можно проверить Fiddler'ом. Да и вообще сравни с фиддлером свою прогу на шарпе и 1С

Что такое Fiddler?
4 Лефмихалыч
 
12.06.14
22:51
(0) защищенное соединение используется? Тось сервер по https работает?
5 Лефмихалыч
 
12.06.14
22:51
не сервер, а сервис
6 Лефмихалыч
 
12.06.14
22:58
короче, пока автор отдупляется, напишу, - зачем спросил. Был у нас при переходе на 8.3.3 забавный случай: стрелялся, стало быть, некий помещ... кхмм... Простите, в 8.3.3 у WS Определение и WSПрокси появился последний необязательный параметр ЗащищенноеСоединение. Так вот к вебсервисам, раздаваемым по https, которые замечательно работали с 8.2, пропал коннект по причине неправильной авторизации. Эксперименты показали, что при испоьзовании защищенного соединения, в 8.3.3 нужно в конструкторе в этот последний параметр передавать
Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено )

я не знаю, почему не работает с значением по умолчанию (параметр, к слову, не обязательный), но вот не работает.
Может кому пригодится инфа...
7 manaxov83
 
12.06.14
23:03
Нет, работает по http, но все равно ща попробую поиграться с этим параметром. Спасибо.
8 angro
 
12.06.14
23:17
куки 8-ка не поддерживает
9 angro
 
12.06.14
23:18
у тебя авторизация по ходу в куках хранится, а 8-ка их не поддерживает
10 manaxov83
 
12.06.14
23:21
(9) печально как то, а как это можно обойти? есть идеи?
11 angro
 
12.06.14
23:23
в FindCompanyByCode добавь пользователя и пароль, в нем и проверяй
12 manaxov83
 
12.06.14
23:27
(11) Этот сервис предоставляет сторонняя компания, у меня нет к нему доступа((
13 Лефмихалыч
 
12.06.14
23:29
как вариант - зафигачить у себя прокси-сервис не на 1С, который будет уметь авторизоваться там по кукам, а тут - авторизовать без куков.
Но это, наверное, слишком хтонично...
14 manaxov83
 
12.06.14
23:32
(13) ну тогда уж лучше обертку на C# написать ввиде ВК например, геморно но вариант. Может че нить попроще можно придумать.
15 angro
 
12.06.14
23:36
как-то же их в 7-ке использовали, наверняка или через ие или ещё через что-то подобное можно
16 Лефмихалыч
 
13.06.14
00:03
можно еще через msscriptcontrol и каким-нить жабаскриптом... яхз...
17 catena
 
13.06.14
07:07
У меня работает через
    Прокси.Пользователь = Логин;
    Прокси.Пароль = Пароль;
Но это к 1С-овским сервисам. К внешнему сервису когда не удалось (не помню уже по какой причине) создать wsсылку, подключаюсь через COMОбъект("Msxml2.XMLHTTP"). Неудобно, приходится запрос собирать, но работает стабильно.
18 manaxov83
 
13.06.14
08:44
(17) кинь примерчик плз.
19 catena
 
13.06.14
09:50
(18)Второго?
oXMLHTTP = Новый COMОбъект("Msxml2.XMLHTTP");
oXMLHTTP.open(<"GET"|"POST"|...>, url, asyncFlag,user,password);

reqST = "[здесь формируем хмл-ку с запросом]";
oXMLHTTP.send(reqST);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(oXMLHTTP.responseText);

структурныйТип = ФабрикаXDTO.Тип("URI пространства имен", "Имя запрашиваемого типа");
Значение =  ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, структурныйТип);

Ну и дальше читаем ответ.
20 catena
 
13.06.14
10:18
Вот еще ссылка, я по ней разбиралась, в принципе там достаточно информации:
wiki:XMLHttpRequest
21 manaxov83
 
13.06.14
10:33
(20) (19)  Спасибо, посмотрю
22 manaxov83
 
15.06.14
12:52
(19)
"reqST = "[здесь формируем хмл-ку с запросом]""
а примерчик запроса ХМЛ можешь кинуть, плз.?
23 manaxov83
 
15.06.14
21:05
Все получилось, большое спасибо catena за идею, Msxml2.XMLHTTP    рулит!!! Действительно фишка авторизации данного сервиса в куках, жаль что через ws-ссылки куки не работают, придется морочиться с запросами XMLHTTP.
24 Serginio1
 
15.06.14
21:36