web-dev-qa-db-fra.com

Comment résoudre le statut HTTP 405 "Méthode non autorisée" lors de l'appel de services Web

J'ai un silence où j'ai besoin d'accéder à un service Web SOAP avec la sécurité WSE 2.0. J'ai tous les proxies c # générés (dérivés de Microsoft.Web.Services2.WebServicesClientProtocol), j'applique le certificat mais lorsque j'appelle une méthode, une erreur se produit:

System.Net.WebException : The request failed with HTTP status 405: Method Not Allowed.
   at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

J'ai fait quelques recherches sur Google et il semble qu'il s'agisse d'un problème de configuration de serveur. Cependant, ce service Web est utilisé par de nombreux clients sans aucun problème (le service Web est fourni par une société Telecom New Zealand, configuré correctement, je crois que c'est écrit en Java)

Quelqu'un peut-il nous éclairer sur ce problème?

15
Muxa

Ok, trouvé quel était le problème. J'essayais d'appeler une URL .wsdl à la place de .asmx url. Doh!

18
Muxa

J'ai constaté que cela était dû au fait que WCF n'était pas installé sur IIS. L'essentiel est que l'extension .svc doit être mappée dans IIS Voir MSDN ici. Utilisez l'outil ServiceModelReg pour terminer l'installation. Vous voudrez toujours vérifier que WCF est installé et que .svc est mappé dans IIS chaque fois que vous recevez un nouvel ordinateur ou réinstallez IIS.

4
A-Dubb

J'ai eu le même problème, mais les détails étaient différents:

L'URL que nous utilisions n'avait pas la partie fichier (.asmx). Appeler l'URL dans un navigateur était OK. Cela fonctionnait également dans un client simple, définissant l'URL via Visual Studio. Mais cela n’a pas fonctionné pour définir l’URL de manière dynamique! Cela a donné la même erreur 405.

Enfin, nous avons constaté que l’ajout de la partie fichier à l’URL du service Web résolvait le problème. Peut-être un bogue du framework .Net?

4
Juan Calero

Dans mon cas, le problème était que la configuration de l'application était mal formée/appelée: Dans config, l'URL du service utilisait "localhost" comme nom de domaine, mais le vrai nom d'hôte était différent de l'URL que j'ai appelée :( "localhost" dans la configuration du nom de domaine que j'utilise dans l'URL. C'est tout!

0
StanislavT.

hmm ces autres clients utilisent-ils aussi C #/.NET?

Méthode non autorisée -> pourrait-il s'agir d'un service REST, au lieu d'un service Web SOAP?

0
cruizer