blazeDS的示例項目中,在services-config.xml文件裏,已經有過如下定義:
- <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
- <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
- </channel-definition>
並且在remoting-config.xml中已經引用了這個channel:
- <default-channels>
- <channel ref="my-amf"/>
- </default-channels>
所以在定義遠程對象時,例如:
- <fx:Declarations>
- <mx:RemoteObject id="ro" destination="my_example"/>
- </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是要改變的,第一種方法就需要更改。
那麼,問題到底出在哪裏呢?我個人覺得問題還是出在這裏
- url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"
從報錯信息來看,{context.root}總是不能被正確理解爲項目名稱,取而代之的是WebContent。所以我的做法是,在services-config.xml中直接把其修改爲
- url="http://{server.name}:{server.port}/blazeDS/messagebroker/amf"
其中,blazeDS是我的示例項目名稱。於是在定義remoteObject時即可以不用設置endpoint。
PS:
看過一些關於context.root即上下文根目錄的修改博客,但是我都不適用。可能是建立工程的架構不一樣,或者環境不一樣(Eclipse3.4 Galileo + FlashBuilder 4 Plugin)