BlazeDS Servlet没有通过代理响应

时间:2010-01-25 15:51:52

标签: flex apache tomcat blazeds mod-proxy

我在通过代理(Apache)在Tomcat 5.5上使用Flex和BlazeDS时遇到问题。我已经搜索过了,但找不到解决问题的答案。我希望你们能帮助我。 : - )

我们的方案如下:

Flex-App使用BlazeDS在Tomcat 5.5上与我们的Dataservice进行通信。 Webapp启用了balze,服务配置包含如下所示的通道定义:

<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>

我将Flex服务器根URL设置为http://xxx.xxx.xxx.xxx:8180/myDataService(Context Root:/ myDataService),并针对此services-config编译我的Flex应用程序。

之后,我将Flex应用程序和我的dataservice部署在服务器上,其中包含一些IP地址xxx.xxx.xxx.xxx。之后可以使用这两个应用程序 使用http://xxx.xxx.xxx.xxx:8180/myFlexApp或数据服务:http://xxx.xxx.xxx.xxx:8180/myDataservice tomcat正在侦听8180端口。

如果我使用带有ip地址的URL打开我的Flex应用程序,一切正常。我的应用程序正在完美地接收数据。

确定。到目前为止一切都很好。

现在我想使用代理服务器(通过apache http服务器)隐藏ip并使用域名。

我对services-config进行了以下更改:

<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>

我将Flex服务器根URL设置为http://mydomain.com/data(上下文根/数据),并针对此services-config编译我的flex应用程序。

我再次在同一个tomcat上部署应用程序。

现在,我在名为mydomain.com的apache目录(etc / apache2 / sites-available /)的sites-available(sites-enabled)文件夹中创建一个条目。 我使用ServerName www.mydomain.com和ServerAlias mydomain.com创建一个虚拟主机。我还在代理块中添加了必要的规则以及虚拟主机定义所需的其他内容。 此文件中包含以下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

之后我可以在浏览器中用http://www.mydomain.com/flexApp打开flex应用程序并加载它。但是当它尝试使用blazeds联系dataservice时会抛出一条错误消息。 我甚至无法打开网址http://mydomain.com/data/messagebroker/amf。显示404错误。之前 - 使用IP地址 - 显示空白页面。 奇怪的是,非火焰Servlets工作正常。例如。我可以打开http://mydomain.com/data/myServlet并且它有效。只有布莱兹不起作用。

您是否知道为什么会出现此问题以及如何解决此问题。非常感谢提前。你真的在帮助我!

的Henrik

2 个答案:

答案 0 :(得分:0)

BlazeDS和Flex应用程序都在通道定义的端点中使用URL。但实际上URL需要不同。当Flex应用程序需要使用data / messagebroker / amf URL时,BlazeDS需要使用myDataservice / messagebroker / amf URL。所以你可以使两个URL相同,即。 myDataservice  而不是数据。或者,您可以在Flex应用程序中手动设置频道信息,而不是让它读取services-config文件。

答案 1 :(得分:0)

我正在使用AJP进行请求重定向:

// enable mod_proxy_ajp
a2enmod proxy_ajp

代理配置如下所示:

ProxyPass /flexApp/messagebroker/ ajp://localhost:8009/flexApp/messagebroker/