Возникла необходимость взаимодействовать с 1C с мобильного клиента под Windows Phone 7/8. Самым простым способом взаимодействия показалось работа через web сервисы, поддерживаемые 1С.
С точки зрения публикации web сервиса особых сложностей нет. Шаги подробно описаны в статьях:
Проблемы возникли с доступом к опубликованному web-сервису 1С. Под IIS 7.5 из под Windows 2008R2 после полудня танцев с бубном проблему решить не удалось. Были изучены статьи и ветки форумов:
но счастье так и не наступило.
В результате решил, что стоит попробовать поднять web сервис на Apache, поскольку с ним у меня обычно все было несколько проще с настройкой. Итак, на другом порту (8080) на том-же сервере был поднят Apache 2.2.22. В 1С был создан ещё один web сервис и опубликован уже на Apache. С настройками по умолчанию он также не заработал. Разберем ошибки.
Web сервис был опубликован в 1С под именем wsApache.
Публикация web-сервиса 1С под Apache
Соответственно, в указанном при публикации каталоге появился файл default.vrd следующего содержания:
В httpd.conf 1С добавила следующие строчки:
В целом, файлы/изменения создаваемые 1С почти рабочие. Теперь о проблемах.
Правильный линк на сервис
В некоторых статьях путь к web сервису указан как: http://имя_сервера:порт/имя_при_публикации/alias?wsdl.
- Имя сервера: s-1s-1-hw
- Порт: 8080
- Имя при публикации: wsApache
- Alias из файла default.vrd: service.1cws
Соответственно, НЕПРАВИЛЬНАЯ ссылка на web сервис 1С такая: http://s-1c-1-hw:8080/wsApache/service.1cws?wsdl
Если использовать такой линк, то 1C 8.2 выдаст сообщение вида:
Правильный вариант:
http://имя_сервера:порт/имя_при_публикации/ ws/ alias?wsdl.
Это обращение эквивалентно обращению по имени сервиса из default.vrd:
http://имя_сервера:порт/имя_при_публикации/ ws/ name?wsdl.
- Name из файла default.vrd: Service
Соответственно, ПРАВИЛЬНЫЙ линк для доступа к web сервису 1С будет такой:
http://s-1c-1-hw:8080/wsApache/ ws/ service.1cws?wsdl
http://s-1c-1-hw:8080/wsApache/ ws/ service?wsdl
Если указать ссылку с суффиксом ?wsdl, то в веб браузере отобразиться XML файл с описанием опубликованного сервиса.
Если указать ссылку без суффикса ?wsdl, то при правильной настройке должна появится страница с гиперссылкой на опубликованный сервис:
Авторизация пользователя при обращении к web сервису 1С
Если попытаться получить доступ к web сервису опубликованному под Apache не исправляя файл default.vrd, то появиться стандартный диалог авторизации:
Диалог авторизации на web сервисе 1С
В тестовой базе был заведен тестовый пользователь IUSR с полными правами с пустым паролем. Если ввести в диалог в качестве логина этого пользователя, то авторизация пройдет успешно и отобразиться либо XML файл, либо ссылка на него (см. выше).
Можно исключить запрос авторизационной информации вбив логин и пароль прямо в файл default.vrd, что, конечно, не рекомендуется с точки зрения безопасности, но иногда необходимо.
Это все. В моем случае каких-то дополнительных правок конфиг файлов не потребовалось.
В некоторых статьях указывалось, что нужно убрать из httpd.conf опцию «Options None«. У меня работает в обоих вариантах, т.е. когда строка присутствует и когда она удалена.
Публикация web сервиса 1С на IIS 7.5
Как уже упоминал выше, с публикацией web сервиса на IIS 7.5 с первого раза у меня не задалось, хотя тонкий клиент запускается без проблем. Поскольку пароль в конфигурационном файле по соображениям безопасности меня не устраивал, вернулся к вопросу настройки IIS. Был опубликован web сервис с именем wsIIS и именем сервиса ServiceIIS и alias-ом serviceIIS.1cws. Галка в чекбоксе «Использовать аутентификацию операционной системы на веб-сервере» для простоты эксперимента была снята.
Публикация web сервиса 1С в IIS 7.5.
Корректная ссылка в моем случае: http://s-1c-1-hw/wsIIS/ws/ServiceIIS?wsdl. При попытке зайти из Chrome/IE получаем ошибку возвращенную IIS:
Ошибка HTTP 401.2 — Unauthorized
дабы избавиться от ошибки правим web.config сформированный 1С следующим образом:
Эта правка эквивалента изменению через консоль управления IIS для нашего опубликованного приложения с именем wsIIS правил авторизации пользователя.
Настройки IIS 7.5 для доступа к web сервисам 1C
Добавление тегов security в web.config или правка правил авторизации в консоли IIS приводит к тому, что при обращении к сервису по указанной выше ссылке появляется запрос на авторизацию. Вводим нашего тестового пользователя IUSR без пароля и получаем нужный XML файл в ответе сервера.
Прописав в default.vrd логин и пароль пользователя, как было указано выше для Apache, уберем окно авторизации и сервис будет всегда авторизовываться под указанным пользователем. Как проходит авторизация можно посмотреть в логах 1C. Но вариант с прописыванием пользователя в конфигурационный файл — не наш путь, ибо не секьюрно.
Изменим настройки авторизации пользователя (в IIS проверка подлинности), чтобы использовалась Windows авторизация. Сменить можно в консоли управления IIS, либо в конфигурационном файле. Мне больше нравиться конфигурационный файл. так как проще переносить настройки при миграции на другой сервер.
Основные этапы запуска удаленного хранилища конфигураций 1С 8 на сервере , на котором планируется установить сервер удаленного хранилища 1С 8:
1. Установка 1С предприятия.
При установке платформы необходимо отметить следующие компоненты:
- Сервер 1С:Предприятия 8.1
- Адаптер web-сервисов 1С:Предприятия 8.1 (он понадобится для обеспечения доступа к серверу хранилища из интернета)
- Сервер хранилища конфигурации.
1.1 Устанавливаем сервер хранилища как сервис, для этого нужно выполнить следующую команду:
"C:Program Files1cv81incrserver.exe" -instsrvc -d "D:WebRepo"
— в ключе –d нужно указать путь к папке где будут храниться ваши хранилища.
2. Настройка поддержки WEB-сервисов.
В рамках данной статьи рассмотрим веб-сервер IIS 6.0(используется для Windows Server 2003).
Номер версии IIS | Выпущена в составе | Год |
---|---|---|
1.0 | Windows NT 3.51 | 1995 |
2.0 | Windows NT 4.0 | 1996 |
3.0 | Пакет обновления 3 для Windows NT 4.0 | 1997 |
4.0 | Пакет Option Pack для Windows NT 4.0 | 1998 |
5.0 | Windows 2000 | 2000 |
5.1 | Windows XP Professional | 2001 |
6.0 | Windows Server 2003 | 2003 |
7.0 | Windows Vista; Windows Server 2008 | 2006 |
7.5 | Windows 7; Windows Server 2008 R2 | 2009 |
Таблица соответствия версий IIS и ОС семейства Windows
Для настройки поддержки web-сервисов необходимо сделать следующее:
- Необходимо зарегистрировать менеджер веб-сервисов: Start—Run "C:Program Files1cv81inwsinst.exe" –iis.
- В C:Inetpubwwwroot создаем каталог с именем appstorage1C
- Создание прав на использование веб-сайтов. Открытие IIS / Веб-узлы / Веб-узел по умолчанию (правой кнопкой мыши) Свойства
- Создание приложения IIS на основе виртуального каталога. Открытие IIS / Веб-узлы / Веб-узел по умолчанию / appstorage1C (правой кнопкой мыши) Свойства / Каталог / кнопка Создать
- Проверка правильности указания пользователя для работы с IIS и флага анонимности. Открытие IIS / Веб-узлы / Веб-узел по умолчанию / appstorage1C (правой кнопкой мыши) Свойства / Безопасность каталога
- Настройка отображения расширений .1cws и .1crs (+ .1ccr) на wsisapi.dll. Открытие IIS / Веб-узлы / Веб-узел по умолчанию / appstorage1C (правой кнопкой мыши) Свойства / Каталог / кнопка Настройка.
Обязательно указываем путь к исполняемому файлу в кавычках если имеется пробел в данном пути.
- Добавление MIME типов 1C:Предприятия в настройки HTTP заголовков виртуальной директории Web-сервисов (расширения .1cws и .1crs (+ .1ccr), Mime тип text/xml). Открытие IIS / Веб-узлы / Веб-узел по умолчанию / appstorage1C (правой кнопкой мыши) Свойства / Заголовки HTTP
- Разрешение запускать wsisapi.dll на IIS. (если не создано — в расширениях Web-сервисов IIS добавить wsisapi.dll как расширение Web-сервисов и разрешить ему запуск). Проверить имеется ли в наличии и при отсутствии создать:
- Настройка прав пользователей на каталог исполняемого файла "C:Program Files1cv81in" 2-х учетных записей IIS
3. Публикация конфигурационного файла веб-сервиса.
Нашему веб-сервису для корректной работы с сервером хранилища конфигураций необходим конфигурационный файл. Его нужно поместить в виртуальный каталог, который мы создали ранее, а выглядеть он должен вот так:
Это файл в формате XML с расширением 1ccr, с единственным узлом и атрибутом connectString – в этом атрибуте необходимо указать адрес нашего сервера хранилища конфигурации в сети. В нашем случае мы не разделяли сервер хранилища и IIS, поэтому указываем имя компьютера, на котором мы проделываем все эти действия. Назовем наш файл repository.1ccr.
На работе мы активно используем возможности платформы «1С:Предприятие 8.3» в качестве web-клиента. Проанализировав способы и затраты на разработку корпоративных приложений, мы решили сфокусироваться на технологиях от компании 1С. Это тема отдельного разговора, а сегодня мне бы хотелось поделиться решением небольшой проблемы, с которой мы столкнулись при публикации очередной информационной базы для работы через web.
Суть в следующем. Есть у нас отдельный сервер для информационных баз с которыми работают удаленные клиенты. Изначально у нас была опубликована одна информационная база (именно для работы через web), и все работало как часы. Сегодня мы решили разместить на этом же сервере новую ИБ и столкнулись с проблемой доступа к базе через web. Публикация из конфигуратора проходила нормально – «1С:Предприятие» внесло соответствующие изменения в конфигурационный файл Apache (мы используем именно этот web-сервер), но при попытке обратиться к публикуемой базе через браузер получали ошибку:
С подобной ошибкой я раньше никогда не сталкивался и первым делом полез проверять конфиг в Apache. Ничего необычного там не увидел. Запись для второй публикуемой базы аналогичная той, которая уже работает. Следующим шагом проверил файлик vrd – тоже все ок. Было у меня предположение, что проблема может крыться в отсутствии прав доступа к директории с файликом vrd, но оказалось, что проблема не в этом.
Промучившись полчаса, решил обратиться за помощью в Google. Увы, кроме аналогичных вопросов ничего хорошего он мне не выдал. Пришлось отправлять к начальной точке и в очередной раз перебирать конфиги.
Не буду описывать дальнейшие действия, скажу лишь, что проблема оказалось в порядке записей опубликованных ИБ в самом конфигурационном файле Apache. Первая наша база была опубликована в корне, т.к. для нее был задан alias “/”. При обращении к site.com, Apache сразу переадресовывал на site.com/base1. Для новой ИБ мы выбрали другой алиас – «b2b/base» (условно) и из-за того, что он находился под «/» 1C возникала ошибка. Переставив записи местами (сначала новую базу, затем старую, которая в корне) – все заработало.
Если вы столкнулись с подобной проблемой – попробуйте мой способ решения. Ради теста я опубликовал еще несколько баз и никаких проблем с доступом не возникло.