是否有可能到Flex应用程序连接到两个不同的BlazeDS的服务器?(Is it possible

2019-10-29 19:00发布

我的问题是是否有可能从同一Flex应用程序连接到两个不同的BlazeDS的服务器? 我已经阅读了这个问题: 能否在Flex客户端应用程序连接到不同的服务器上运行BlazeDS的? 然而,这似乎是在讨论Flex客户端在不同的服务器上的其他服务器上必然连接到BlazeDS的,但不是另一个 BlazeDS的可能性。

我也看到了这个问题: 一个Flex客户端连接到两台的webapps使用BlazeDS的-检测到重复的基于HTTP的FlexSessions

在尝试我都试过了,我得到了上面的第二个问题中提到的错误:检测到重复的基于HTTP的FlexSessions,一般是由于远程主机禁用会话cookie。 会话cookie必须能够正确地管理客户端连接。

是把一个Flex应用程序两个BlazeDS的启用服务器完全不可能的? 我们希望能够拥有所使用的一些Flex应用程序,每个有自己的功能自己的本地BlazeDS的服务器的“常用功能” BlazeDS的服务器。

//编辑目前我在做它的方式:

在我的MXML文件中,我定义,像这样AA channset:

        <mx:ChannelSet id="dataService1Channel">
            <mx:channels>
                <mx:AMFChannel id="dataService1AmfChannel"
                               channelFault="dataService1Fault(event)"
                               url="http://localhost:7001/dataservice1/messagebroker/amf"/>
            </mx:channels>
        </mx:ChannelSet>

然后我用下面的配置DataService的此ChannelSet(当我用FlashBuilder的“连接到BlazeDS的”,这是自动配置funcion)

      <dataservice1:DataService1Service id="dataService1Service"
                                          fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                                          showBusyCursor="true"
                                          channelSet="{dataService1Channel}"/>

其他的DataService被定义如下所示:

      <dataservice2:DataService2Service id="dataService2Service"
                                          fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                                          showBusyCursor="true"/>

这些电话的工作,我可以得到的数据,但我收到警告我在Flex应用程序的警报的形式提及。 如果我能抑制警告,我会很高兴。

Answer 1:

是把一个Flex应用程序两个BlazeDS的启用服务器完全不可能的?

是! 我看不出有任何理由,你为什么就不能这样做,假设正确的crossdomain.xml文件到位。

[注意,从这里开始了我假设你正在使用的BlazeDS与RemoteObjects的沿着/ AMF]

去做这个; 你最有可能在您的服务-config文件中创建不同的端点。 默认端点[至少对于服务,包括配置使用ColdFusion]自动指向该SWF供应关闭的服务器。 没有理由你不能创建自己的终点,即使在同一服务-config文件不同的端点。 你也可以有runpoints defind在运行时,如果你觉得这是必要的。

我不知道为什么你会被接收会话相关的错误; 除非你的服务器端代码以某种方式需要会话。



Answer 2:

好吧,我同时连接两个BlazeDS的服务器与一个FLEX客户端(SWF)所面临的同样的问题。 事实上随着柔性文件说:

“每一个Flex应用程序,写在MXML或ActionScript,最终被编译成SWF文件。当SWF文件连接到BlazeDS的服务器,创建一个flex.messaging.client.FlexClient对象来表示服务器上的SWF文件。SWF文件和FlexClient实例具有一对一的对应关系。在该映射中,每个FlexClient实例有一个名为ID的唯一标识符,其BlazeDS的服务器生成。一个ActionScript单例类,mx.messaging.FlexClient,还具有Flex创建应用程序访问其独特的FlexClient ID“。

例如,你有两个BlazeDS的服务器。 1)REMOTE 2)的本地和单FlexApp(SWF) “MyClient”。

步骤1. MyClient连接到远程服务器BlazeDS的。 从而产生一个唯一的ID。

第2步:现在MyClient连接到本地服务器BlazeDS的。 在步骤1中生成的相同的id将被用作仅单个的uniqe标识可以为单个FlexApp(SWF)来生成。

第3步:现在再次MyClient将重新连接到远程服务器BlazeDS的。 每个一FlexApp(SWF)连接到BlazeDS的服务器时间的唯一FlexClient生成以及唯一ID Remeber。 所以,现在在这个步骤3,我们已经在步骤1中所生成的ID,肯定会抛出重复会话异常。

解决方案:有一种变通方法,我发现,在我的应用程序应用。 有用。 每次FlexApp(SWF)切换BlazeDS的服务器使生成的ID = NULL。

FlexClient.getInstance().id=null;

在以上引用的例子使第1步:现在后ID = null当它连接到本地BlazeDS的也不会使用由第1步:生成的ID相反,它会创建一个新的唯一ID在本地BlazeDS的模式下工作时。

再次,当你从本地到远程模式(步骤3)进行切换,使ID =通过该码片空。 所以,现在当FlexApp(SWF)连接到远程BlazeDS的,新的唯一ID将被生成,不会有一个重复会议的例外。

感谢和问候,阿努邦G.



文章来源: Is it possible to connect a flex application to two different BlazeDS servers?