Приветствую
Нужна небольшая помощь, потому что мозги сломал уже. Либо я что-то не понимаю, либо упускаю, либо проблема столь проста, что гуру нигде в куроводствах про её решение не упоминают.
Преамбула:Пишу небольшое приложение на управляемых, которое должно работать также и на андроидовых мобильниках.
Для публикации в сети приходится пользоваться 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, выполняющее проверку учетных данных пользователя до начала обработки данных. Данное приложение не может проверить ваши учетные данные.
Подробные сведения об ошибке
Модуль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));
КонецФункции