2010-01-25 68 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/