cannot load wsap22 dll into server

Web-клиент 1С 8.2 (Apache)

*Внимание, если у вас нет выделенного сервера для 1С, а ваш сайт «крутится» на обычном хостинге (без выделенного сервера), то настроить web-клиент данным способом не получится. В этой статье рассмотрен случай когда платформа 1С установлена на выделенном сервере, на нем же «крутится» сайт. В ближайшее время будет написана ещё одна статья рассказывающая о способах настройки web-клиента в условиях отличных от описанных.

Настройка на стороне 1С: Предприятие:

  1. Заходим в конфигуратор нужной нам конфигурации 1С 8.2
  2. Администрирование — Публикация на веб-сервере
  • Имя — Это та строка, которую вы будете писать в адресной строке после имени сайта (В нашем случае «sb» ->http://alexeev.pro/sb )
  • Веб-сервер — этот параметр определяет сервер (В нашем случае Apache 2.2)
  • Каталог — Путь до папки в корневой директории сайта для размещения конфигурационного файла 1С
  • Ставим галочку «публиковать тонкий клиент и веб-клиент»
  • Нажимаем «Опубликовать»

Настройка на стороне Apache:

Открываем httpd.conf и видим, что 1С внесла в него изменения. Изменений не много, вот они:

В принципе здесь все правильно, но работать НЕ БУДЕТ. Для того что бы все работало, необходимо исправить код сгенерированный 1С в соответствии с представленным ниже:

После внесения всех изменений перезагружаем apache и радуемся жизни.

Примечание:

Все работы проводились с использованием Windows Server 2008 R2 x64, Apache 2.2.17, 1С:Предприятие 8.2 (8.2.13.205).

Значение директивы _1cws_module зависит от версии вашей ОС и папки установки 1С:Предприятие

Проверить работу можно по адресу http://alexeev.pro/sb

Все работы рекомендуется проводить при выключенном apache, при запросе 1С о перезагрузке apache выбираем НЕТ. Запускаем apache только после настройки всех параметров.

P.S.:

При дальнейшем изучении проблемы была выявлена работоспособность представленного ниже кода, его рекомендуется использовать только если основной код выдает ошибку:

Использовании директивы +ExecCGI намекает нам на то, что мы, все таки, работаем с 1С в режиме CGI. Если на вашем сервере не настроен CGI, то лучше настройте.

When trying to use PHP 5.6.30 with Apache 2.4 there seems to be a somewhat well-known issue (outside of using Docker) but there does not seem to be any real solution for fixing the issue. I am getting the following error:

httpd.exe: Syntax error on line 534 of C:/Apache24/conf/httpd.conf: Cannot load c:/php/php5apache2_4.dll into server: The specified module could not be found.

Examining the directory of C:php (inside the Docker container) I see the DLL is clearly there

This answer talks about making sure to use the same bit version (I am using 64 bit) and to also make sure the versions are thread safe, which they are. Here, in my Dockerfile, you can see the links to the 64 bit thread-safe versions of Apache and PHP:

Note the Visual Studio compiler is for 2015. Do I really need to level the playing field for using the compiler?

Finally, the following lines in the httpd.conf (line 534, mentioned in the error, is the line starting with LoadModule )are what is causing the error to show in the Docker logs for the container when started. I have them commented out at the moment so I could get Apache to start as a stand-alone (allowing me to examine what is going on inside of the container).

I plan to deploy some existing PHP code in the container and do not want to upgrade to PHP7 (which will create more work to fix some things with code which will fail on PHP7). Outside of upgrading to PHP 7 is there any other way to fix the issue?

Имеется windows-сервер c 1С 8.3 (БД — MSSQL).
Задача — настроить публикацию базы на линуксовом web-сервере.
Тонкости — модуль 1С для апача работает только с 2.0 и 2.2, а текущая версия в большинстве дистрибутивов — 2.4+
Пишется больше для себя, чтобы не забыть. Ну и мало ли, вдруг пригодится еще кому — не придется бегать по форумам в поисках нужных команд.

Железо — дал гигабайт оперативки, одно ядро и 20 гигабайт диска. Увеличить никогда не поздно.
ОС: Debian Stable, привык я к нему.

Ставлю минимум, включая ssh-сервер, но не включая web. К этому еще вернемся.

После установки базовая настройка по вкусу, я обычно ставлю локаль utf8, ставлю sudo, mc и vim, остальное по потребностям.
Дальше надо поставить apache 2.2. Причем сделать это правильным способом, а не просто скачав deb-пакет. 🙂

Сперва добавляем в /etc/apt/sources.list строчки со ссылкой на предыдущую версию дистрибутива.

Можно, конечно, написать oldstable — в настоящий момент тоже будет правильно. Но только в настоящий, потому рано или поздно выйдет новая стабильная версия и в oldstable и тогда вместо apache 2.2 там будет 2.4. Хотя, надеюсь, к тому времени 1С обновится и заработает с более новыми версиями апача. Но кто их знает? 🙂
Где mirror.yandex.ru — там пишется имя вашего любимого сервера с репозиторием.

Потом обновляем индексы — apt-get update — и смотрим, что у нас тут есть по apache командой apt-cache showpkg apache2
Там много всего выводится, но нас интересует только начало вывода:

Видим, что кроме 2.4.10 имеется версия 2.2.22-13+deb7u6 — то, что нужно.
Ставим: apt-get install apache2=2.2.22-13+deb7u6
Или, точнее: apt-get install apache2=2.2.22-13+deb7u6 apache2-mpm-worker=2.2.22-13+deb7u6 apache2.2-common=2.2.22-13+deb7u6 apache2.2-bin=2.2.22-13+deb7u6, а остальные зависимости уже подтянутся автоматом.

После этого ставим апачей на холд, чтобы не обновить случайно.

Можно запустить service apache2 start и стукнуть телнетом на 80 порт для проверки, если лень браузер запускать.

telnet localhost 80

Ругается — значит работает.

Теперь ставим 1С.
Нужны только веб-сервисы 1С (пакет 1c-enterprise83-ws). И 1c-enterprise83-common, который в зависимостях прописан. И 1c-enterprise83-server, который в зависимостях не прописан, но без него утилита публикации пишет «Ошибка сегментирования».
В принципе, необходим только модуль для апача wsap22.so из пакета 1c-enterprise83-ws, а всё остальное можно через текстовый редактор сделать. Но я человек ленивый и лучше потрачу несколько мегабайт на 1С, чем буду руками вбивать строчки в конфиги. 🙂

Дальше надо создать папку для хранения настроек опубликованных БД 1С. Можно в дереве вебсервера, но я лучше отдельно сделаю, прямо в корне, /1с.
После этого из папки с установленными файлами 1С (/opt/1C/v8.3/i386) запускаем утилиту публикации webinst со следующими параметрами (публикую нашу тестовую базу):

-apache22 — наша версия вебсервера
-wsdir testlitupp — папка на вебсервере, в которой будет доступна опубликованная база (http://вашсервер/testlitupp)
-dir /1c/testlitupp — папка, в которой будет храниться файл default.vrd с настройками публикации
-connstr «Srvr=10.0.0.4;Ref=testlitupp;» — ip сервера 1С и имя публикуемой базы данных
-confPath /etc/apache2/apache2.conf — путь к конфигу apache

Если было написано «Публикация выполнена», значит всё прошло удачно. Если пишет «Ошибка сегментирования», то вы, скорее всего, забыли поставить 1c-enterprise83-server.
По результатам имеем файл default.vrd

И несколько новых строк в файле конфигурации веб-сервера:

Перезапускаем апач (service apache2 restart) и идём смотреть, что там опубликовалось.
Опубликовалось, просит пароль.

И впускает в базу.

Работает. Дополнительные настройки публикации делаются через редактирование vrd-файлов (к примеру, включение отладки), а допиливанием интерфейса веб-клиента должны заниматься ваши программисты 1С.
Если будете дописывать опции, к примеру, с подключением сервисов руками, то не забудьте удалить в файле default.vrd последний слэш в строчке «base=»/testlitupp» ib=»Srvr=10.0.0.4;Ref=testlitupp;» / >», я с этим долго возился. Если не удалить и что-то дописать после, то вылетает «ошибка 500» без дополнительной информации.
Какая будет нагрузка на вебсервер — я ещё не знаю, у нас это пока в тестовом режиме работает и хватает выделенных ресурсов. Но добавить памяти или ядер по мере увеличения потребностей проблем не составит.

В целом, в других дистрибутивах linux всё делается аналогично, различия только в способах установки старой версии apache.

Оцените статью