2012-08-08 6 views
0

J'essaie d'exécuter un message SOAP pour un itérateur SPR searchRequest. Mon point de terminaison utilise l'outil Quest SPML Provider qui se trouve au-dessus d'IIS.Spring WebServiceTemplate connexion persistante

Le problème est, j'exécute la recherche, il renvoie les résultats et un ID d'itérateur. Vous prenez cet ID d'itérateur et faites une autre requête (cette fois-ci une requête IteratorRequest) et le service Web retournera le prochain ensemble d'éléments. Lorsque cela est fait soit par l'interface utilisateur fournie avec le logiciel, soit par SoapUI, je n'ai aucun problème, mais lors de l'implémentation via Spring, j'obtiens un ID invalide.

Après quelques recherches, j'ai trouvé ce https://support.quest.com/SolutionDetail.aspx?id=SOL76284 qui indique que lorsqu'une connexion, ou une session est perdue à l'extrémité, l'itérateur sera rendu invalide. Ma question est, y a-t-il un moyen de forcer un WebServiceTemplate.marshalSendAndReceive à maintenir une connexion active jusqu'à ce que j'aie fini de parcourir les résultats? Ou suis-je hors-ligne, et j'ai besoin de poursuivre une voie différente.

Merci beaucoup!

Répondre

1

Le messageSender est ce qui est utilisé par WebServiceTemplate pour envoyer le protocole de choix de la charge utile. Si c'est HTTP alors vous pouvez le configurer pour utiliser HttpComponentsMessageSender qui utilise HttpClient qui prend en charge les connexions HTTP persistantes (keep-alive).

NOTE

  1. HTTP/1.1 dispose d'une connexion keep-alive mais le serveur peut décider de fermer après un certain nombre de demandes ou ne supporte pas les garder en vie.
  2. Même JDK 6 classes liées soutiennent keep-alive mais vous pouvez activer la mise en commun avec HttpClient
+0

Impressionnant, je l'ai fait commencé à chercher dans moi-même, au milieu de codage la création de messages manuel, etc. Merci pour la réponse =) – dardo

+0

@ Aravind, y a-t-il un exemple de travail montrant comment définir keep-alive sur wstemplate? – Espresso

Questions connexes