2010-01-25 54 views
0

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

我们的情景是这样的:

Flex的应用程序使用BlazeDS的上一个Tomcat 5.5与我们的DataService沟通。 web应用程序是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(上下文根目录:/ myDataService)和编译反对这种服务,配置我的Flex应用程序。

之后,我将我的flex应用程序和我的dataservice部署在某个IP地址为xxx.xxx.xxx.xxx的服务器上。 http://xxx.xxx.xxx.xxx:8180/myDataservice 将tomcat的端口就是8180.

听取如果我使用的IP的URL地址一切正常打开我的Flex应用程序:这两个应用程序之后使用http://xxx.xxx.xxx.xxx:8180/myFlexApp或DataService在该 可用。我的应用程序完美地接收数据。

好的。一切都很好。

现在我想使用代理服务器(通过apache http服务器)来隐藏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> 

我设置了Flex服务器根URL来http://mydomain.com/data(上下文根/数据),并编译反对这种服务,配置我的Flex应用程序。

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

现在我在我的apache目录(etc/apache2/sites-available /)中的站点可用(站点已启用)文件夹中创建一个名为mydomain.com的条目 我使用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联系数据服务时会引发错误消息。 我甚至无法打开网址http://mydomain.com/data/messagebroker/amf。将显示404错误。之前 - 使用IP地址 - 显示空白页面。 奇怪的是,非开发的Servlets工作正常。例如。我可以打开http://mydomain.com/data/myServlet,它的工作原理。只有Blaze不起作用。

你有什么想法为什么会出现这个问题,我怎么解决它。提前致谢。你真的帮助我!

亨里克

回答

0

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

0

我使用AJP的请求重定向:

// enable mod_proxy_ajp 
a2enmod proxy_ajp 

代理配置是这样的:

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