2010-06-23 4 views
0

est-il possible, en utilisant la classe PHP SoapServer, de retransmettre des données au client le long du calcul?Est-ce que la classe PHP SoapServer permet de diffuser une grande quantité de données?

Je sais que cela est possible en utilisant ASP.NET

http://msdn.microsoft.com/en-us/library/aa528818.aspx

sinon, est-il possible de le mettre en œuvre? dans la mesure où je comprends les installations de savon php, ils permettent seulement mes fonctions de retourner un gros morceau de données, et une fois terminé la bibliothèque le convertira dans un grand message de savon ...: -/

merci d'avance:

Répondre

0

La réponse courte est que ce n'est pas possible avec la classe SoapServer.

L'implémentation actuelle construit le document XML résultant en vérifiant la validité des paramètres (pour s'assurer que vous n'envoyez pas de paramètres SOAP non valides). Bien qu'il puisse être possible d'implémenter ce que vous demandez dans l'extension, je serais un changement significatif, car il faudrait faire deux boucles sur les paramètres, une fois pour vérifier la validité (afin qu'ils puissent lancer un savon Fault), puis une seconde fois pour sérialiser au client. Ceci est également possible pour implémenter cela dans votre script PHP, mais cela vous obligerait à sérialiser toutes les données de réponse à la main (puisque la classe interne ne vous expose pas cette fonctionnalité). Ce n'est pas une mauvaise option si vous contrôlez les deux côtés de la requête (client et serveur) et n'avez pas besoin de tirer parti des fonctionnalités de test avancées de la bibliothèque du serveur. Pour cela, vous devez simplement envoyer un en-tête XML de savon standard, puis faire une boucle sur vos données pour le convertir en XML au fur et à mesure que vous l'écrivez directement au client.

+0

L'extension de savon peut prendre un flux au lieu d'une chaîne, puis lire dans le flux, l'encoder et l'envoyer au client jusqu'à la fin du flux. Je ne sais pas à quel point ce serait difficile (je ne connais pas la base de code), mais je ne comprends pas votre argument en double boucle. – Artefacto

+0

Le problème serait que la bibliothèque ne pouvait pas détecter les erreurs de codage à temps pour faire quoi que ce soit (c'est-à-dire convertir la réponse à une erreur SOAP), car elle aurait déjà envoyé la sortie et les en-têtes. Une erreur soap doit envoyer un code d'état 500, ce qu'elle ne pouvait pas faire si elle commençait à envoyer une sortie avant de valider tous les paramètres du résultat. –

Questions connexes