2009-06-17 4 views
4

J'ai essayé de trouver la bonne configuration pour supporter les deux requêtes http/s dans une application Flex. J'ai lu tous les documents et ils fais allusion à faire quelque chose comme ce qui suit:Comment prendre en charge les canaux HTTP et HTTPS dans Flex/BlazeDS?

<default-channels> 
    <channel ref="my-secure-amf"> 
    <serialization> 
     <log-property-errors>true</log-property-errors> 
    </serialization> 
    </channel> 
    <channel ref="my-amf"> 
    <serialization> 
     <log-property-errors>true</log-property-errors> 
    </serialization> 
    </channel> 

Cela fonctionne très bien en frappant l'application via https mais obtenir des erreurs de communication intermittentes en frappant la même application via http. Voici un abrégé des 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"/> 
     <properties> 
     <!-- HTTPS requests don't work on IE when pragma "no-cache" headers are set so you need to set the add-no-cache-headers property to false --> 
     <add-no-cache-headers>false</add-no-cache-headers> 
     <!-- Use to limit the client channel's connect attempt to the specified time interval. --> 
     <connect-timeout-seconds>10</connect-timeout-seconds> 
     </properties> 
    </channel-definition> 

    <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> 
     <!--<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>--> 
     <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" 
       class="flex.messaging.endpoints.AMFEndpoint"/> 
     <properties> 
     <add-no-cache-headers>false</add-no-cache-headers> 
     <connect-timeout-seconds>10</connect-timeout-seconds> 
     </properties> 
    </channel-definition> 

Je suis en cours d'exécution avec Tomcat 5.5.17 et Java 5.

  1. Les BlazeDS docs disent que c'est la meilleure pratique. Y a-t-il un meilleur moyen?
  2. Avec cette configuration, il semble y avoir 2-3 tentatives associées à chaque canal défini dans l'élément default-channels, donc il faut toujours ~ 20s avant que le canal my-amf se connecte via une requête http. Existe-t-il un moyen de remplacer les 2 ou 3 tentatives pour dire, 1 réessayer pour chaque canal?

Merci d'avance pour les réponses.

Répondre

3

J'ai http et https fonctionnels, bien que je l'ai seulement testé sur Firefox et IE7. Jusqu'à présent, je n'utilise que BlazeDS pour la communication à distance. Voici ma configuration:

<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" /> 
     <properties> 
      <polling-enabled>false</polling-enabled> 
     </properties> 
    </channel-definition> 

    <channel-definition id="my-secure-amf" 
     class="mx.messaging.channels.SecureAMFChannel"> 
     <endpoint 
      url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" 
      class="flex.messaging.endpoints.SecureAMFEndpoint" /> 
     <properties> 
      <add-no-cache-headers>false</add-no-cache-headers> 
     </properties> 
    </channel-definition> 

Vous ne spécifiez pas le serveur d'applications que vous utilisez; ça peut être un problème. J'ai rencontré quelques problèmes lors du passage de HTTPS à HTTP (connexions sécurisées) sous Tomcat. Une chose que j'ai faite pour résoudre les problèmes était d'installer Jetty et de l'essayer là. Je ne l'avais jamais utilisé auparavant, mais il était très rapide à mettre en place et à déployer, même à travers Eclipse. Je savais alors que j'avais un problème spécifique à Tomcat, ce qui facilitait la recherche d'une solution (par laquelle je veux dire possible).

0

Si les destinations qui utilisent http et https sont des destinations différentes, vous pouvez définir les canaux avec l'ordre d'utilisation pour cette destination. Par exemple mySecureDestination et myDestination sont deux destinations différentes. Pour mySecureDestination:

<destination id="mySecureDestination" channels="httpsChannel"></destination> 

et pour le canal http non sécurisé

<destination id="myDestination" channels="httpChannel"></destination> 
1

Cela nous conduisait les noix aussi. Pour le résoudre, faites d'abord le http (my-amf) dans la balise default-channels, puis https (my-secure-amf)

<default-channels> 
    <channel ref="my-amf"> 
<serialization> 
    <log-property-errors>true</log-property-errors> 
</serialization> 
</channel> 
<channel ref="my-secure-amf"> 
    <serialization> 
    <log-property-errors>true</log-property-errors> 
</serialization> 
</channel> 
Questions connexes