Pour un appel de service Web utilisant un WSDL, l'erreur Cannot find dispatch method for {http://ws.somecompany.com/services}ValidateUser
apparaît, qu'est-ce que cela signifie exactement? Cela signifie-t-il qu'il ne peut pas trouver ValidateUser
?
Cela signifie généralement que la structure SOAP n'a pas pu trouver l'opération devant être appelée via cette demande. Une structure SOAP inspecte généralement le message pour rechercher des pointeurs sur la manière de router le message vers l'opération. Les raisons de cette erreur sont principalement liées à des problèmes de configuration (différents espaces de noms, différents codages (RPC vs doc/lit), utilisation de WS-Addressing par rapport à un utilisateur SOAP, etc.).
J'ai eu un problème similaire et luttant, googler pendant 1 jour. Mais c'était une simple erreur qu'au lieu de:
{http://ws.somecompany.com/services}ValidateUser
CA devrait etre
{http://ws.somecompany.com/services/}ValidateUser
Je n'avais pas vérifié mon WSDL clairement.
Dans mon cas, j'ai résolu le problème en m'assurant que mon fichier de configuration soit app.config ou web.config, en fonction du point de terminaison correct de votre client. J'avais une mauvaise adresse dans mon terminal. Je l'ai changé et cela a bien fonctionné.
Mon cinquante cent, j'ai reçu le même message d'erreur mais mon cas était encore différent de tout ce qui précède, alors espérons-le, cela pourrait aider quelqu'un.
J'avais un fichier .wsdl, qui est devenu obsolète à mon insu lorsque des collègues de l'autre côté de ws ont renommé un élément. Malheureusement, les modifications n'étaient pas visibles lorsque j'ai comparé .wsdl à la leur, car le fichier .wsdl comportait une importation .xsd contenant en fait un élément renommé. Après avoir trouvé le changement, j'ai mis à jour mon fichier .xsd et mon tada! l'erreur est partie et cela a fonctionné.
J'ai aussi perdu un jour à cause de ce problème, même si sa cause fondamentale était différente.
Dans notre cas, deux URL de points de terminaison similaires ont été mélangées dans le fichier de propriétés. Les deux services étaient présents et en cours d'exécution, mais les WSDL ne correspondaient pas. Par conséquent, au lieu d'une exception ConnectionException, nous obtenions cette exception SOAPFaultException: "Impossible de trouver la méthode d'envoi".
J'avais le même problème dans mon application .NET. Dans mon cas, définir l'url de la même manière que " http: // x-xxx-xx-xx-01: 8080 // TestProject/testproject? Wsdl " (URL factice) résolu le problème dans le code ci-dessous.
Dim rptGen as WSTestProject.testproject = Nothing
rptGen = New WSTestProject.testproject With {
.Url = "http://x-xxx-xx-xx-01:8080//TestProject/testproject?wsdl",
.Timeout = 1200000
}
Ici, WSTestProject est le WebService NameSpace et testproject est la méthode Web.
Dans mon cas, l'exception suivante a été lancée même si j'ai fourni tous les paramètres
SoapFault exception: [S:Client] Cannot find dispatch method for {}parameters in
Après quelques heures à me cogner la tête, ajouter un\tout en initialisant SoapClient a résolu le problème.
De:
$client = new SoapClient($soapURL);
À:
$client = new \SoapClient($soapURL);