Группа: Пользователи
Сообщений: 47
Спасибо сказали: 13 раз
Рейтинг: 2.6
Приветствую Нужна небольшая помощь, потому что мозги сломал уже. Либо я что-то не понимаю, либо упускаю, либо проблема столь проста, что гуру нигде в куроводствах про её решение не упоминают.
Преамбула: Пишу небольшое приложение на управляемых, которое должно работать также и на андроидовых мобильниках. Для публикации в сети приходится пользоваться IIS 7.5, установленном на Win 2008 R2
По всяким руководствам настроил веб-сервер, сделал публикацию базы. Взлетает и на тонких (через хттп) и в браузерах. Локалка/интернет - работает без разницы. Нафеячил мобильное приложение. Оно на мобилу установилось, фунциклирует как надо, свою базу ведет, блымает и переливаецца. Амбула, блин : Не могу настроить обмен. По всякому уже строил, сервак сносил/ставил раз пять (виртуальный). Но нифига. Одна и та же ошибка, что бы я на серваке не конфигурил. Точнее - две. Если я в модуле общей команды Обмен пишу
Определения = Новый WSОпределения("http://ip-address.local/zak2/ws/ws1.1cws?wsdl", "username", "userpass");
то приложение на мобиле выводит такую ругань: Ругань
{ОбщаяКоманда.Обмен.МодульКоманды(41)}: Помилка при виклику методу контексту (ВыполнитьОбмен) через: Під час виклику веб-сервісу відбулася помилка. Помилка виклику операції сервісу: {http://localhost/ws1}:WebОбмен:ВыполнитьОбмен() через: Під час виклику веб-сервісу відбулася помилка. Аутентифікація користувача не виконана.
Ошибка сервера в приложении "ip-address.local/ZAK2" Internet Information Services 7.5
Описание ошибки: Ошибка HTTP 401.5 - Unauthorized По URL-адресу, куда надо попасть, установлено приложение ISAPI или CGI, выполняющее проверку учетных данных пользователя до начала обработки данных. Данное приложение не может проверить ваши учетные данные.
Наиболее вероятные причины: Специальное расширение ISAPI, приложение CGI, страница ASP или обработчик заблокировали запрос с ошибкой "Доступ запрещен".
Что можно предпринять: Обратитесь к поставщику расширения ISAPI, приложения CGI, страницы ASP или обработчика, блокирующего запрос. Создайте правило трассировки, чтобы отслеживать невыполненные запросы для этого кода состояния HTTP. Чтобы получить дополнительные сведения о создании правила трассировки для невыполненных запросов, щелкните здесь.
Ссылки и дополнительные сведения... URL-адрес, куда надо попасть, представляет собой страницу ASP или подключен к расширению ISAPI, приложению CGI либо к специализированному обработчику. Специальное расширение ISAPI, приложение CGI, страница ASP или обработчик отказали в выполнении запроса, возвратив ошибку "Доступ запрещен". Дополнительные сведения...» Статьи базы знаний Microsoft Knowledge Base: 907273
через: Аутентифікація користувача не виконана.
А вот если я в модуле общей команды Обмен уберу имя и пароль
Определения = Новый WSОпределения("http://ip-address.local/zak2/ws/ws1.1cws?wsdl");
{ОбщаяКоманда.Обмен.МодульКоманды(12)}: Помилка при виклику конструктора (WSОпределения) через: Аутентифікація користувача не виконана. URL сервісу: [необходимо зарегистрироваться для просмотра ссылки]
Т.е. я так понимаю, что первый вариант, с логином и паролем - вернее. Но что строить в этом копанном IIS - я уже не понимаю. Все права есть, опубликованная база работает. Приложение на мобилу грузится и выполняется. Чё ему надо для обмена - неферштейн.
кст. Апач - вещь хорошая, но в данном случае не катит.
&НаСервере Процедура ОбработкаКомандыСервер() Адрес = "http://192.168.0.128/zak2/ws/ws1.1cws?wsdl"; Определения = Новый WSОпределения(Адрес, "zvn", "4369040"); УРИ = "http://localhost/ws1"; Прокси = Новый WSПрокси(Определения, УРИ, "WebОбмен", "WebОбменSoap");
СисИнфо = Новый СистемнаяИнформация; КодМобильногоКомпьютера = Строка(СисИнфо.ИдентификаторКлиента);
// инитим
Узел = ПланыОбмена.Мобильные.ЭтотУзел(); Если НЕ ЗначениеЗаполнено(Узел.Код) ИЛИ Узел.Код <> КодМобильногоКомпьютера Тогда ОбъектУзла = Узел.ПолучитьОбъект(); ОбъектУзла.Код = КодМобильногоКомпьютера; ОбъектУзла.Наименование = КодМобильногоКомпьютера; ОбъектУзла.Записать(); КонецЕсли;
ЦентральныйУзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду("001"); Если ЦентральныйУзелОбмена.Пустая() Тогда НовыйУзел = ПланыОбмена.Мобильные.СоздатьУзел(); НовыйУзел.Код = "001"; НовыйУзел.Наименование = "Центральный"; НовыйУзел.Записать(); ЦентральныйУзелОбмена = НовыйУзел.Ссылка; КонецЕсли;
// обмен ДанныеОбмена = Прокси.ВыполнитьОбмен(КодМобильногоКомпьютера, СформироватьПакетОбмена(ЦентральныйУзелОбмена));
//обработка ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.УстановитьСтроку(ДанныеОбмена.Получить()); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ); ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); НачатьТранзакцию(); Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл Данные = ПрочитатьXML(ЧтениеХМЛ); Если НЕ Данные = Неопределено Тогда Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; Данные.ОбменДанными.Загрузка = Истина; Данные.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеХМЛ.Закрыть();
КонецПроцедуры
Функция СформироватьПакетОбмена(УзелОбмена) Экспорт ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку("UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения); Пока ВыборкаИзменений.Следующий() Цикл Данные = ВыборкаИзменений.Получить(); ЗаписатьXML(ЗаписьXML, Данные);// Записываем данные в сообщение КонецЦикла; ЗаписьСообщения.ЗакончитьЗапись(); Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9)); КонецФункции
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
ValeryZ @ Сегодня, 14:13
, Собственно Вам текст ошибки говорит что не так - не выполнена аутентификация, т.е. неправильно ввели логин и пароль... Вы когда через браузер пытаетесь в опубликованную базу зайти, у вас же логин и пароль от базы спрашивает - вот под ними и нужно подключаться. WSОпределение вроде как правильно оформили - у меня аналогичный код в моем приложении норм работает, смотрите в сторону очепяток, языка и т.д.)
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Пользователи
Сообщений: 47
Спасибо сказали: 13 раз
Рейтинг: 2.6
Bernet @ Сегодня, 14:45
, Да суть в том, что я уже и в 1С прописал юзера с максимальными правами, и на серваке точно такого же админа создал... но ошибка первого типа все едино выходит.
Может в мобильном платформе трабл? Основную конфу пишу на 8.3.10.2252 Мобильная 8.3.10.51
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
Если в браузере ввести строку
Цитата
[необходимо зарегистрироваться для просмотра ссылки]
вам должна схема открыться - открывается или с ошибкой падает?
Ещё вот попалось на мисте:
Цитата
Походу имя пользователя 1С на русском языке не воспринимается ... Завели пользователя в 1С по-английски - всё заработало
попробуйте создать пользователя латиницей - может IIS неадекватно кирилицу воспринимает, хз, я под Апачем все запускаю
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Уроки Кухара глядел. Уроки от 1С - перечитал/просмотрел. И теперь не пойму, то ли тупой, то ли карму полировать надо.
UPD. Грешил на проброс апачевским прокси (с адреса 192.168.0.8, где у меня линуховый интернет-сервер, перекидаю на 192.168.0.128, где 1С обосновалась на винде с веб-серваком), но попытал счастья без пробросов, на голых айпишниках - та же петрушка.
Группа: Пользователи
Сообщений: 56
Из: Краматорск, Донецкая, Украина
Спасибо сказали: 16 раз
Рейтинг: 0
logist @ Сегодня, 16:14
, Я не понял через что вы обмен выполняете, вот код через веб-сервис DataTransfer, операция Registration, на сервере пользователь Fedorov, без пароля (тоже переименовал на латиницу ), и по моему вы не правильно понимаете назначение объекта WSПрокси, в коде ниже переменной Ответ приходит возврат операции веб-сервиса на сервере
Функция ПодключениеКВебСервису(ПараметрДляОтправкиНаСервер) Экспорт //Сервер авторизации ВСОпределение = Новый WSОпределения("http://192.168.1.2/DemoUT10/ws/DataTransfer.1cws?wsdl","Fedorov"); ВСервис = ВСОпределение.Сервисы.Получить("DataTransfer","DataTransfer"); ВТочкаВхода = ВСервис.ТочкиПодключения.Получить("DataTransferSoap"); ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить("Registration");
ВСПрокси = Новый WSПрокси(ВСОпределение, "DataTransfer","DataTransfer","DataTransferSoap"); ВСПрокси.Пользователь = "Fedorov"; Тест = Новый Структура; Тест.Вставить("Стр","Строка"); Ответ = ВСПрокси.Registration(СериализаторXDTO.ЗаписатьXDTO(ПараметрДляОтправкиНаСервер)); Возврат СериализаторXDTO.ПрочитатьXDTO(Ответ); КонецФункции
Группа: Основатель
Сообщений: 13983
Из: Киев
Спасибо сказали: 4553 раз
Рейтинг: 3682.7
ValeryZ, в панели управления IIS в корневом узле и в узле конкретного сайта (вашей публикации) есть пункт меню Проверка подлинности. Если клацнуть туда, там должна открыться табличка, в которой должна быть строка Анонимная проверка подлинности. В ней состояние Включено? Если нет, включите и в корне и в публикации.
Группа: Пользователи
Сообщений: 56
Из: Краматорск, Донецкая, Украина
Спасибо сказали: 16 раз
Рейтинг: 0
ValeryZ @ Вчера, 14:13
, На мобильном сделть форму вставить в неё код
&НаКлиенте Процедура ПроверитьСервис(Команда) мояСтрока = "КлиентСтрока";// То что отправляем на сервис сообщить(мояСтрока); сообщить(ПростоеПодключениеКВебСервису(мояСтрока));//Так как операция веб-сервиса возвращает строку КонецПроцедуры &НаСервере функция ПростоеПодключениеКВебСервису(данные) Экспорт ВСОпределение = Новый WSОпределения("http://192.168.1.2/DemoUT10/ws/newService.1cws?wsdl","Fedorov"); //Должен быть пользователь Fedorov в базе на сервере //"ваша строка подключения публикации сервиса на сервере", "пользователь, если есть и пароль если есть" ВСПрокси = Новый WSПрокси(ВСОпределение, "newService","newService","newServiceSoap"); ВСПрокси.Пользователь = "Fedorov"; ответСервиса = ВСПрокси.MyOperation(данные); возврат ответСервиса; КонецФункции
на сервере , подопытная УТ 10.3, создаём веб сервис (newService) указываем URI пространство имен у него(здесь указано newService), в нем создаём операцию (MyOperation), с параметром strokaKlient типа string (http://www.w3.org/2001/XMLSchema) и возвращающей значение типа string (http://www.w3.org/2001/XMLSchema) по умолчанию
Функция MyOperation(strokaKlient) возврат "" + strokaKlient + "Отвечаю что я с сервера прилетела"; КонецФункции
Если без ошибок опубликуете сервис, то при вводе в браузере вашей строки подключения (http://192.168.1.2/DemoUT10/ws/newService.1cws?wsdl где newService.1cws имя вашего опубликованного веб сервиса, DemoUT10 папка публикации, [необходимо зарегистрироваться для просмотра ссылки] адрес вашего сервера) откроется схема работы сервиса
Группа: Пользователи
Сообщений: 47
Спасибо сказали: 13 раз
Рейтинг: 2.6
uanr81 @ Вчера, 20:21
, Вот такой подход дал результат:
Цитата(uanr81 @ 22.03.18, 20:21)
Функция ПодключениеКВебСервису(ПараметрДляОтправкиНаСервер) Экспорт //Сервер авторизации ВСОпределение = Новый WSОпределения("http://192.168.1.2/DemoUT10/ws/DataTransfer.1cws?wsdl","Fedorov"); ВСервис = ВСОпределение.Сервисы.Получить("DataTransfer","DataTransfer"); ВТочкаВхода = ВСервис.ТочкиПодключения.Получить("DataTransferSoap"); ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить("Registration");
ВСПрокси = Новый WSПрокси(ВСОпределение, "DataTransfer","DataTransfer","DataTransferSoap"); ВСПрокси.Пользователь = "Fedorov"; Тест = Новый Структура; Тест.Вставить("Стр","Строка"); Ответ = ВСПрокси.Registration(СериализаторXDTO.ЗаписатьXDTO(ПараметрДляОтправкиНаСервер)); Возврат СериализаторXDTO.ПрочитатьXDTO(Ответ); КонецФункции
Единственное, что добавил - пароль юзера.
Кстати, первоначально попробовал тестовую функцию. И когда она заработала, понял, что я что-то не понимаю в «WSОпределения» и «WSПрокси» Надо больше курить ретелатуры
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!