关于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)

 

 

 

你可能感兴趣的:(Flex,职场,blazeds,休闲,endpoint)