2010-08-09 5 views
0

J'ai un serveur Web qui sert de client SOAP pour communiquer avec un serveur SOAP tiers. Mon client est implémenté en PHP en utilisant php :: soapclient. Quelle est la meilleure façon de vérifier que le serveur SOAP fonctionne afin que je puisse fournir le navigateur client avec le site sinon si le serveur SOAP est en panne ou ne répond pas informer l'utilisateur que le service n'est pas disponible actuellement?Erreurs du client SOAP PHP et du serveur SOAP

Le système fournit essentiellement un mashup des services tiers offerts en utilisant la communication client/serveur SOAP pour afficher des données au navigateur et laisser les utilisateurs interagir avec le système tiers.

Répondre

2

bien ... une fois que j'ai travaillé avec un serveur de savon php et un client de savon php. Je pense que quand le client appelle le service, il passe par le wsdl et s'il y a un problème pendant la conection (ou même l'exécution) côté serveur, la réponse du client sera un objet SoapFault .. id di quelque chose comme

$resp = $this->client->__soapCall($serviceName,$serviceParams); 
    if (get_class($resp)=="SoapFault"){ 
     throw new Exception("Webservice error - Message: ".$resp->faultstring); 
    } 
+0

Quel type de conception serait préférable d'intercepter ces exceptions et de notifier l'utilisateur du problème ainsi que de signaler aux administrateurs de site le débogage pour déterminer ce qui s'est passé? – Chris

+0

Je dirais que vous pouvez créer votre propre classe SoapException qui s'étend de Exception et dans le constructeur, vous pouvez enregistrer le $ resp-> faultstring dans la DB ou l'envoyer aux admins du site .. et pour les utilisateurs un try-catch devrait être assez pour leur dire qu'il y avait un problème .. je ne sais pas c'est le "meilleur" mais je ferais comme ça =) – pleasedontbelong

1

Vous pouvez appeler le http://server:1234/foo/bar?wsdl et si vous obtenez le retour WSDL, déclenchez la demande SOAP réelle.

Si l'application est en panne, vous n'obtiendrez probablement pas le WSDL et si c'est seulement une partie du service qui le bloque, il n'y a pas grand-chose que vous puissiez faire pour le détecter de toute façon.

+0

Quelle est la meilleure façon d'appeler un WSDL à cet égard? wget vient à l'esprit, mais je ne savais pas s'il y avait un meilleur moyen de php? – Chris

+0

file_get_contents() en supposant que vous autorisez les URL dans fopen. Ou vérifiez les en-têtes avec cURL. – timmy