Сервлет BlazeDS не отвечает через прокси - PullRequest
0 голосов
/ 25 января 2010

У меня проблема с использованием Flex с BlazeDS на Tomcat 5.5 через прокси (Apache). Я уже искал это, но не нашел ответы, которые решили мою проблему. Надеюсь, вы, ребята, сможете мне помочь. : -)

Наш сценарий следующий:

Flex-приложение, использующее BlazeDS для связи с нашим Dataservice на Tomcat 5.5. Веб-приложение активировано, а конфигурация служб содержит определения каналов, подобные следующим:

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://xxx.xxx.xxx.xxx:8180/myDataService/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint">
</channel-definition>

Я установил URL-адрес корневого сервера Flex на http://xxx.xxx.xxx.xxx:8180/myDataService (контекстный корень: / myDataService) и скомпилировал мое приложение flex с этим config-services.

После этого я развертываю свое Flex-приложение и службу данных на сервере с некоторым IP-адресом xxx.xxx.xxx.xxx. Два приложения доступны после этого используя http://xxx.xxx.xxx.xxx:8180/myFlexApp или для службы данных: http://xxx.xxx.xxx.xxx:8180/myDataservice Кот слушает порт 8180.

Если я открываю свое flex-приложение, используя URL-адрес с IP-адресом, все работает нормально. Мое приложение отлично получает данные.

Хорошо. Пока все хорошо.

Теперь я хочу использовать прокси-сервер (через HTTP-сервер Apache), чтобы скрыть IP-адрес и использовать доменное имя.

Я делаю следующие изменения в моей конфигурации служб:

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://mydomain.com/data/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint">    
</channel-definition>

Я установил для корневого URL-адреса Flex Server значение http://mydomain.com/data (контекстный корень / данные) и скомпилировал свое Flex-приложение с помощью этого config-services.

Я снова развертываю приложения на том же коте, что и раньше.

Теперь я создаю запись в папке sites-available (sites-enabled) моего каталога apache (etc / apache2 / sites-available /) с именем mydomain.com Я создаю виртуальный хост с ServerName www.mydomain.com и ServerAlias ​​mydomain.com. Я также добавляю необходимые правила в блок Proxy и другие необходимые вещи для определения виртуального хоста. В этом файле содержатся следующие записи ProxyPass / ProxyPassReverse:

ProxyPass /flexApp http://xxx.xxx.xxx.xxx:8180/myFlexApp
ProxyPassReverse /flexApp http://xxx.xxx.xxx.xxx:8180/myFlexApp

ProxyPass /data http://89.19.229.148:8180/myDataservice
ProxyPassReverse /data http://89.19.229.148:80/myDataservice

После этого я могу открыть приложение flex с помощью http://www.mydomain.com/flexApp в браузере, и оно загружается. Но появляется сообщение об ошибке, когда он пытается связаться со службой данных, используя блейзиды. Я даже не могу открыть URL http://mydomain.com/data/messagebroker/amf. Ошибка 404 отображается. До этого - с использованием IP-адреса - отображалась пустая страница. Странно то, что безоблачные сервлеты работают нормально. например. Я могу открыть http://mydomain.com/data/myServlet, и это работает. Только Blaze не работает.

У вас есть идеи, почему эта проблема возникает и как я могу ее решить. Заранее большое спасибо. Вы действительно помогаете мне !!!

Хенрик

Ответы [ 2 ]

0 голосов
/ 30 августа 2010

Я использую AJP для перенаправления запроса:

// enable mod_proxy_ajp
a2enmod proxy_ajp

Конфигурация прокси выглядит следующим образом:

ProxyPass /flexApp/messagebroker/ ajp://localhost:8009/flexApp/messagebroker/
0 голосов
/ 06 февраля 2010

И BlazeDS, и приложение Flex используют URL-адрес в конечной точке определения канала. Но URL-адреса на самом деле должны быть разными. BlazeDS должен использовать URL myDataservice / messagebroker / amf, а приложение Flex должно использовать URL data / messagebroker / amf Таким образом, вы можете сделать оба URL одинаковыми, т.е. myDataservice вместо данных. Или вы можете вручную установить информацию о канале в приложении Flex вместо того, чтобы читать файл services-config.

...