Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Мобильное приложение 8.3 + IIS 7.5 Не могу настроить обмен          
ValeryZ Подменю пользователя
сообщение 22.03.18, 14:13
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 46
Спасибо сказали: 12 раз
Рейтинг: 0

Приветствую
Нужна небольшая помощь, потому что мозги сломал уже. Либо я что-то не понимаю, либо упускаю, либо проблема столь проста, что гуру нигде в куроводствах про её решение не упоминают.

Преамбула:
Пишу небольшое приложение на управляемых, которое должно работать также и на андроидовых мобильниках.
Для публикации в сети приходится пользоваться IIS 7.5, установленном на Win 2008 R2

По всяким руководствам настроил веб-сервер, сделал публикацию базы. Взлетает и на тонких (через хттп) и в браузерах. Локалка/интернет - работает без разницы.
Нафеячил мобильное приложение. Оно на мобилу установилось, фунциклирует как надо, свою базу ведет, блымает и переливаецца.

Амбула, блин smile.gif :

Не могу настроить обмен.
По всякому уже строил, сервак сносил/ставил раз пять (виртуальный). Но нифига. Одна и та же ошибка, что бы я на серваке не конфигурил. Точнее - две.
Если я в модуле общей команды Обмен пишу

Определения = Новый 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, выполняющее проверку учетных данных пользователя до начала обработки данных. Данное приложение не может проверить ваши учетные данные.


Подробные сведения об ошибке

МодульIsapiModuleУведомлениеExecuteRequestHandlerОбработчик1C Web-service ExtensionКод ошибки0x00000000

Запрашиваемый URL-адресhttp://192.168.0.128:80/zak2/ws/ws1.1cwsФизический путьC:\inetpub\wwwroot\zak2\ws\ws1.1cwsСпособ входаАнонимнаяПользователь, выполнивший входАнонимная



Наиболее вероятные причины:
Специальное расширение 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));
КонецФункции


Bernet Подменю пользователя
сообщение 22.03.18, 14:45
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 319 раз
Рейтинг: 0

ValeryZ @ Сегодня, 14:13 * ,
Собственно Вам текст ошибки говорит что не так - не выполнена аутентификация, т.е. неправильно ввели логин и пароль...
Вы когда через браузер пытаетесь в опубликованную базу зайти, у вас же логин и пароль от базы спрашивает - вот под ними и нужно подключаться.
WSОпределение вроде как правильно оформили - у меня аналогичный код в моем приложении норм работает, смотрите в сторону очепяток, языка и т.д.)


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

ValeryZ Подменю пользователя
сообщение 22.03.18, 15:13
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 46
Спасибо сказали: 12 раз
Рейтинг: 0

Bernet @ Сегодня, 14:45 * ,
Да суть в том, что я уже и в 1С прописал юзера с максимальными правами, и на серваке точно такого же админа создал... но ошибка первого типа все едино выходит.

Может в мобильном платформе трабл?
Основную конфу пишу на 8.3.10.2252
Мобильная 8.3.10.51

Bernet Подменю пользователя
сообщение 22.03.18, 15:24
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 319 раз
Рейтинг: 0

Если в браузере ввести строку
Цитата
[необходимо зарегистрироваться для просмотра ссылки]

вам должна схема открыться - открывается или с ошибкой падает?

Ещё вот попалось на мисте:
Цитата
Походу имя пользователя 1С на русском языке не воспринимается ... Завели пользователя в 1С по-английски - всё заработало

попробуйте создать пользователя латиницей - может IIS неадекватно кирилицу воспринимает, хз, я под Апачем все запускаю


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

ValeryZ Подменю пользователя
сообщение 22.03.18, 15:49
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 46
Спасибо сказали: 12 раз
Рейтинг: 0

Bernet @ Сегодня, 15:24 * ,
Схема открывается. Приложение (1cema.xml) из соответствующего каталога тоже.
Юзер - латиницей
Пароль - цифирью.

Я мисту и инфостарт перелопатил ужо капец как. В основном народ заканчивает настройки иис на публикации веб приложения. А потом бодро друг у дружки копипастит статьи.
"мы уже здесь месяц отдыхаем" ©

Уроки Кухара глядел. Уроки от 1С - перечитал/просмотрел. И теперь не пойму, то ли тупой, то ли карму полировать надо.

UPD.
Грешил на проброс апачевским прокси (с адреса 192.168.0.8, где у меня линуховый интернет-сервер, перекидаю на 192.168.0.128, где 1С обосновалась на винде с веб-серваком), но попытал счастья без пробросов, на голых айпишниках - та же петрушка.

logist Подменю пользователя
сообщение 22.03.18, 16:14
Сообщение #6

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Добавьте:
Прокси = Новый WSПрокси(Определения, УРИ, "WebОбмен", "WebОбменSoap");
//+++
Прокси.Пользователь = "zvn";
Прокси.Пароль = "4369040";


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: ValeryZ,

uanr81 Подменю пользователя
сообщение 22.03.18, 20:21
Сообщение #7

Говорящий
***
Группа: Пользователи
Сообщений: 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(Ответ);
КонецФункции

Спасибо сказали: ValeryZ,

ValeryZ Подменю пользователя
сообщение 22.03.18, 23:07
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 46
Спасибо сказали: 12 раз
Рейтинг: 0

logist @ Сегодня, 16:14 * ,
Тоже не взлетело sad.gif

uanr81 @ Сегодня, 20:21 * ,
Спасибо за подсказку, попробую покопаться/поанализировать.

По результатам отпишусь.

logist Подменю пользователя
сообщение 22.03.18, 23:29
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(uanr81 @ 22.03.18, 20:21) *
Я не понял через что вы обмен выполняете

У меня свой вебсервис

Цитата(uanr81 @ 22.03.18, 20:21) *
и по моему вы не правильно понимаете назначение объекта WSПрокси

Может и не понимаю, я привел пример из своего рабочего кода

код
Функция ПолучитьОтветСервера(АдресСервера, ИдентификаторУстройства, ИмяОперации, ИмяФункции, Данные = Неопределено) Экспорт
    
    WSОпределениe    = Новый WSОпределения(АдресСервера + "/ws/MobileWS.1cws?wsdl", "mobile", "mobile");
    WSСервис        = WSОпределениe.Сервисы.Получить("MobileWS", "MobileWS");
    WSТочкаВхода    = WSСервис.ТочкиПодключения.Получить("MobileWSSoap");
    WSОперация        = WSТочкаВхода.Интерфейс.Операции.Получить(ИмяФункции);    
    
    Прокси = Новый WSПрокси(WSОпределениe, "MobileWS", "MobileWS", "MobileWSSoap");
    Прокси.Пользователь    = "mobile";
    Прокси.Пароль        = "mobile";
    
    Если ИмяОперации = "get" Тогда
        ОтветСервера = Вычислить("Прокси."+ИмяОперации+"(ИдентификаторУстройства,ИмяФункции)");
    Иначе // ИмяОперации = "post"
        ОбъектXDTO            = СериализаторXDTO.ЗаписатьXDTO(Данные);
        ТекстXML            = Новый ЗаписьXML;
        ТекстXML.УстановитьСтроку();
        ФабрикаXDTO.ЗаписатьXML(ТекстXML, ОбъектXDTO);
        СериализированныеДанные = ТекстXML.Закрыть();
        ОтветСервера = Вычислить("Прокси."+ИмяОперации+"(ИдентификаторУстройства,ИмяФункции,Новый ХранилищеЗначения(СериализированныеДанные,Новый СжатиеДанных(9)))");
    КонецЕсли;
    
    ОтветЗначение = ОтветСервера.Получить();
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(ОтветЗначение);
    ОбъектXDTO = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
    ЧтениеXML.Закрыть();
    
    Возврат ОбъектXDTO;
        
КонецФункции


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Vofka Подменю пользователя
сообщение 23.03.18, 9:50
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

ValeryZ, в панели управления IIS в корневом узле и в узле конкретного сайта (вашей публикации) есть пункт меню Проверка подлинности. Если клацнуть туда, там должна открыться табличка, в которой должна быть строка Анонимная проверка подлинности. В ней состояние Включено? Если нет, включите и в корне и в публикации.

uanr81 Подменю пользователя
сообщение 23.03.18, 11:02
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 56
Из: Краматорск, Донецкая, Украина
Спасибо сказали: 16 раз
Рейтинг: 0

logist @ Вчера, 23:29 * ,
Это я не вам, а автору темы. Просто многие слову прокси в этом контексте придают не то значение

uanr81 Подменю пользователя
сообщение 23.03.18, 12:42
Сообщение #12

Говорящий
***
Группа: Пользователи
Сообщений: 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 папка публикации, [необходимо зарегистрироваться для просмотра ссылки] адрес вашего сервера) откроется схема работы сервиса

Спасибо сказали: ValeryZ,

ValeryZ Подменю пользователя
сообщение 23.03.18, 16:43
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 46
Спасибо сказали: 12 раз
Рейтинг: 0

uanr81 @ Сегодня, 12:42 * ,
Спасибо. Испытаю вечером. Немножко был в командировке, поэтому не имел возможности опробовать.

ValeryZ Подменю пользователя
сообщение 23.03.18, 20:55
Сообщение #14

Общительный
**
Группа: Пользователи
Сообщений: 46
Спасибо сказали: 12 раз
Рейтинг: 0

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 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 14:10
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!