關於blazeDS中endpoint的設置問題

     blazeDS的示例項目中,在services-config.xml文件裏,已經有過如下定義:

  1. <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> 
  2.     <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> 
  3. </channel-definition> 

並且在remoting-config.xml中已經引用了這個channel:

  1. <default-channels> 
  2.     <channel ref="my-amf"/> 
  3. </default-channels> 

所以在定義遠程對象時,例如:

  1. <fx:Declarations> 
  2.     <mx:RemoteObject id="ro" destination="my_example"/> 
  3. </fx:Declarations> 

應該不需要額外增加endpoint的設置。看了很多論壇,大多數都認爲設置是必須的,而且這樣設置確實可以解決問題,但是個人覺得這是多次一舉的事情。大多數人都是怎麼做的呢?(引用這位朋友的做法 http://mingxiao2010.blog.163.com/blog/static/861904812010143946515/

配置endpoint爲任意如下的一種方式:

1) 全路徑:          endpoint="http://localhost:8080/flexWeb/messagebroker/amf" >

2) 基於contextRoot: endpoint="/flexWeb/messagebroker/amf" >

3) 基於當前路徑:   endpoint="messagebroker/amf" >

注意,加粗部分是項目名稱

這並不是不可以,只是我覺得同一件事做了兩次,很不爽。如果這麼做的話,可以選擇第3)個做法,隨着項目的發佈,server是要改變的,第一種方法就需要更改。

    那麼,問題到底出在哪裏呢?我個人覺得問題還是出在這裏

  1. url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" 

    從報錯信息來看,{context.root}總是不能被正確理解爲項目名稱,取而代之的是WebContent。所以我的做法是,在services-config.xml中直接把其修改爲

  1. url="http://{server.name}:{server.port}/blazeDS/messagebroker/amf" 

其中,blazeDS是我的示例項目名稱。於是在定義remoteObject時即可以不用設置endpoint。

PS:

看過一些關於context.root即上下文根目錄的修改博客,但是我都不適用。可能是建立工程的架構不一樣,或者環境不一樣(Eclipse3.4 Galileo + FlashBuilder 4 Plugin)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章