2

シーンの説明: 私のプログラムはflex + java + blazeDS + activeMQによって実装され、flex ConsumerによってactiveMQからのjmsメッセージをサブスクライブします。現在、同じサーバーで2つのTomcatを配信しています。これらはすべて私のプログラムを含み、ActiveMQは別のサーバーにあります。サーバー、今度はIEやChromeなどの同じ種類のブラウザで2つのアプリケーションを開きます。URLはhttp: // localhost:8080 /HelloWord/index.html、http:// localhost:8181 /のようになります。 HelloWord / index.html

問題: 最初のアプリケーションのURLはhttp:// localhost:8080 /HelloWord/index.htmlです。つまり、メッセージをサブスクライブできますが、URLがhttp://である2番目の2番目のアプリケーションを開くとlocalhost:8181 /HelloWord/index.htmlつまり、事故が発生し、2つのアプリケーションがメッセージをサブスクライブできません。

エラーログ: 1.flexクライアントログ(flash.log): 通常、リモートホストがセッションCookieを無効にしているため、重複するHTTPベースのFlexSessionが検出されました。クライアント接続を正しく管理するには、セッションCookieを有効にする必要があります 。2.javaコンソールログ: flex.messaging.client.FlexClientNotSubscribedException:クライアントにはエンドポイント「my-polling-amf」に対するアクティブなサブスクリプションがありません。 flex.messaging.client.FlexClient.throwNotSubscribedException(FlexClient.java:1789)at flex.messaging.client.FlexClient.pollWithWait(FlexClient.java:967)at flex.messaging.endpoints.BasePollingHTTPEndpoint.handleFlexClientPoll(BasePollingHTTPEndpoint.java:538 )at flex.messaging.endpoints.AbstractEndpoint.handleFlexClientPollCommand(AbstractEndpoint.java:1151)at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:965)at flex.messaging.endpoints.AbstractEndpoint $$ FastClassByCGLIB $$1a3ef066 org.springframework.aop.framework.Cglib2AopProxy $ CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)のnet.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)のinvoke() framework.ReflectiveMethodInvocation。proceed(ReflectiveMethodInvocation.java:150)at org.springframework.flex.core.MessageInterceptionAdvice.invoke(MessageInterceptionAdvice.java:66)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework .aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:124)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.framework.Cglib2AopProxy (Cglib2AopProxy.java:576)at flex.messaging.endpoints.AMFEndpoint $$ EnhancerByCGLIB $$ 3ae4b8ad.serviceMessage()at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:103)at flex.messaging.endpoints 。amf.LegacyFilter.invoke(LegacyFilter.java:158)at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67) flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:166)at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:291)at flex.messaging.endpoints.AMFEndpoint $$ EnhancerByCGLIB $$ 3ae4b8ad .service()at org.springframework.flex.servlet.MessageBrokerHandlerAdapter.handle(MessageBrokerHandlerAdapter.java:108)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)at org.springframework.web.servlet org.springframework.web.servletの.DispatcherServlet.doService(DispatcherServlet.java:716)。FrameworkServlet.processRequest(FrameworkServlet.java:647)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)at javax.servlet .http.HttpServlet.service(HttpServlet.java:722)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) )org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)atorg.apache.catalina.authenticator.AuthenticatorBase。 org.apache.catalina.core.StandardHostValveでinvoke(AuthenticatorBase.java:462)。invoke(StandardHostValve.java:164)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)at org.apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java :286)org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process(Http11AprProtocol.java:272)at org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1730)atjava。 util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)at java.util.concurrent.ThreadPoolExecutor$Worker。run(ThreadPoolExecutor.java:908)

私が行ったテスト: 1.FlexClient.getInstance()。id = UIDUtil.createUID(); 無効な2.FlexClient.getInstance()。id = null; 無効3.異なる種類のブラウザを使用します。1つはIeを使用し、もう1つはChromeを使用して、2つのアプリケーションを開きます。4. 1台のサーバー1台のTomcat、同じ種類のブラウザを使用します。つまり、それらを開くために、それらは大丈夫です。5. flex MXMLでカスタマーAMFChannelを使用するか、flex-config.xmlでデフォルトのAMFChannel定義を使用します。無効です。

ネットワークの友達の進歩: 1.http://blogs.adobe.com/lin/2011/05/duplication-session-error.html 2.http://stackoverflow.com/questions/7659775/duplicate-session-error-when -perform-proxy-lookup2つは無効です。

以前にこの状況に遭遇した人はいますか?アドバイスをいただければ幸いです。

4

1 に答える 1

3

今日、私もフレックス セッションの問題に遭遇し、この SO の質問に遭遇しました。

まあ、質問はかなり古いので、元のポスターはおそらくもう助けを必要としないと思いますが、この投稿に出くわした人は誰でも、次の情報が役立つかもしれません.

Flex アプリは、Web アプリ コンテナー (ここでは tomcat) からの有効なセッション ID を必要とし、実際の AMF 要求で見つかった clientOID をこの sessionID にバインドします。

したがって、元の投稿者の問題はおそらく、2 つの tomcat インスタンスで同じセッション ID を使用しようとしたことでした。すべての tomcat インスタンスがセッションをそれ自体とメモリに保持するため、これは機能しません。

私の問題は、記録された jmeter テストがあり、記録された AMF メッセージの clientID と URL の sessionID の組み合わせを受け入れないことでした。ただし、返される AMF エラー メッセージには、ヘッダー セクションに有効な新しいセッション ID が含まれています。そのエラー メッセージの AMF ヘッダーは次のようになります (少なくとも私にとっては)。

Version: 3
(Header #0 name=AppendToGatewayUrl, mustUnderstand=true)
 ";jsessionid=OLD_SESSION_ID;jsessionid=NEW_SESSION_ID"

そこで、AMF ヘッダーから新しいセッション ID を抽出し、それを残りのリクエストに使用しました。

これが誰にとっても役立つことを願っています...

于 2015-04-27T17:06:40.193 に答える