2009-04-28 8 views
1

J'essaye d'appeler un client de savon à des fins de test du même serveur que j'exécute le service. Mon WSDL est à: http://www.installittoday.com/api/server.php?wsdl Je suis en train de charger simplement avec:PHP SoapClient expire


    $client = new SoapClient('http://www.installittoday.com/api/server.php?wsdl'); 

mais je retourner l'erreur:

 

Warning: SoapClient::SoapClient(http://www.installittoday.com/api/server.php?wsdl) [soapclient.soapclient]: failed to open stream: Connection timed out in /home/installi/public_html/api/client.php on line 4 

Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php on line 4 

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.installittoday.com/api/server.php?wsdl' : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php:4 Stack trace: #0 /home/installi/public_html/api/client.php(4): SoapClient->SoapClient('http://www.inst...') #1 {main} thrown in /home/installi/public_html/api/client.php on line 4 
 

Pourtant, je peux mettre en place le client très bien d'un autre site de mien. Est-ce un problème de pare-feu ou quoi?

+0

ce qui est sur la ligne 4 de ce fichier? Essayez de le modifier pour obtenir une réponse. Peut être un pare-feu. Le WSDL rend bien ici. – IEnumerator

+0

$ client = nouveau SoapClient ('http://www.installittoday.com/api/server.php?wsdl'); – Louis

Répondre

2

Chargement également à partir d'ici très bien.

Essayez de vous connecter à partir du site que vous voulez que le client avec un navigateur Web, ou si sa une machine distante sans proxy configuré curl utilisation:

curl http://www.installittoday.com/api/server.php?wsdl 

qui vous dira si vous pouvez même obtenir une connexion à ce site via la machine.

Vous pouvez également essayer plusieurs connexions ou augmenter default_socket_timeout si la vitesse de connexion de votre machine est limitée/encombrée.

Sur quels ports essayez-vous de vous connecter?

+0

C'était le problème que j'avais finalement. La machine que je demandais au wsdl était celle qui le servait. Il y avait un problème de configuration DNS qui l'empêchait de résoudre son nom de domaine. – Dave

0

OP ici encore.

Un peu plus de contexte: j'héberge le service (évidemment) sur installittoday.com. J'essaie également de lancer un client au même endroit juste à des fins de test. Je peux me connecter au service de littéralement tous les autres sites que j'ai essayé parfaitement, et j'ai ouvert avec succès quelques WSDL avec le client hébergé sur installittoday. Il semble que le site ne peut pas se connecter à lui-même pour une raison quelconque. Je doute sincèrement que c'est un problème de ligne congestionné. Maintenant que je suis arrivé à ce stade, je me rends compte que ce problème dépasse probablement SOAP pour une sorte de problème de configuration d'Apache, à moins qu'il y ait un problème de port qui me manque. Je n'ai pas configuré de ports différemment, est-ce que je devrais m'assurer que j'ai ouvert pour SOAP?

+0

SOAP fonctionne normalement sur HTTP, cela ne devrait donc pas poser de problème. –

0

J'ai résolu ce problème en enregistrant le WSDL nusoap généré dynamiquement en tant que fichier autonome et tout semble fonctionner correctement. Je ne sais pas pourquoi ce serait le cas.

Je prévois de le déplacer en PHP5 de toute façon, j'utilisais simplement nuSoap pour générer le WSDL.

1

Pour tous ceux qui rencontrent cette erreur. Essayez de désactiver le cache WSDL, à partir de votre fichier php.ini ou d'un paramètre de votre appel SOAP.

Le problème est que PHP met par défaut le fichier WSDL dans le dossier temporaire. Une fois le fichier mis en cache, PHP continue d'utiliser ce fichier. Il est seulement actualisé après 24 heures (le ttl par défaut pour le cache). Par conséquent, si vous modifiez votre fichier WSDL, PHP récupèrera l'ancien, ce qui entraînera une erreur comme l'OP. Matt, votre problème a été résolu en utilisant le référencement d'un fichier qui n'est jamais mis en cache.

La raison pour laquelle il est mis en cache par défaut parce que votre serveur doit demander le fichier, puis l'analyser, ce qui prend un peu de récupération et de traitement.

Vous avez deux options, soit modifier la variable pertinente dans votre php.ini ou envoyer un paramètre avec votre appel SOAP.

Par exemple:

$client = new SoapClient($webservice, array('classmap' => $soap_class_map, 'cache_wsdl' => WSDL_CACHE_NONE)); 

Hope this helps.

3

Assurez-vous que ces extensions sont activées dans votre php.ini

extension=php_curl.dll 
extension=php_openssl.dll 
extension=php_soap.dll 
+0

Ça a bien marché. Merci ahmad – Anz

Questions connexes