45 votes

Le service WCF retourne "Méthode non autorisée".

Je suis en train de développer mon premier service WCF et lorsque j'essaie de l'utiliser, j'obtiens "Method not Allowed" sans autre explication.

J'ai mis en place mon interface avec le ServiceContract et le OperationContract :

    [OperationContract]
    void FileUpload(UploadedFile file);

Avec la méthode actuelle :

    public void FileUpload(UploadedFile file) {};

Pour accéder au service, je saisis http://localhost/project/myService.svc/FileUpload mais j'obtiens l'erreur "Method not Allowed" (Méthode non autorisée)

Est-ce que j'ai manqué quelque chose ?

76voto

darthjit Points 946

Si vous utilisez le [WebInvoke(Method="GET")] sur la méthode du service, assurez-vous que le nom de la méthode est bien "GET" et non "Get" ou "get" car il est sensible à la casse ! J'ai eu la même erreur et il m'a fallu une heure pour la résoudre.

0 votes

Hah, c'était mon problème. Merci.

0 votes

Cette solution m'a aidé à résoudre l'erreur 405 également ! Merci !

0 votes

J'ai utilisé Get au lieu de GET et j'ai essayé de nombreuses autres réponses de stackoverflow, mais rien ne fonctionne. Superbe, vous avez sauvé ma journée Merci pour les informations valables.

66voto

Ries Points 1405

Votre navigateur envoie une requête HTTP GET : Assurez-vous que vous avez l'attribut WebGet sur l'opération dans le contrat :

[ServiceContract]
public interface IUploadService
{
    [WebGet()]
    [OperationContract]
    string TestGetMethod(); // This method takes no arguments, returns a string. Perfect for testing quickly with a browser.

    [OperationContract]
    void UploadFile(UploadedFile file); // This probably involves an HTTP POST request. Not so easy for a quick browser test.
 }

3 votes

Cela n'a pas fonctionné pour moi (asp.net sur framework 4.0) mais la réponse de darthjit ci-dessous a fonctionné.

5 votes

Alors pourquoi celui-ci est vérifié au lieu de celui de Darjhit ?

0 votes

@LeiLeyba Parce que l'auteur marque la réponse, pas la communauté.

4voto

Jeremy McGee Points 13826

Les types intrinsèques de base (par ex. byte , int , string et les tableaux) seront sérialisés automatiquement par WCF. Les classes personnalisées, comme votre UploadedFile, ne le seront pas.

Alors, une question stupide (mais je dois la poser...) : est-ce que UploadedFile est marqué comme une [DataContract] ? Si ce n'est pas le cas, vous devez vous assurer que c'est le cas et que chacun des membres de la classe que vous voulez envoyer est marqué par [DataMember].

À la différence de remoting, où marquer une classe avec [XmlSerializable] vous a permis de sérialiser la classe entière sans prendre la peine de marquer les membres que vous avez voulu sérialiser, WCF a besoin que vous marquiez chaque membre. (Je crois que ceci change dans .NET 3.5 SP1...)

Une ressource énorme pour le développement de WCF est ce que nous connaissons dans notre magasin comme "le livre de poisson" : Programmation des services WCF par Juval Lowy. Contrairement à d'autres livres sur WCF, qui sont un peu secs et académiques, celui-ci adopte une approche pratique de la construction de services WCF et est réellement utile. Entièrement recommandé.

1voto

Ubiguchi Points 2145

Il semble que vous utilisiez une adresse incorrecte :

Pour accéder au service, je saisis http://localhost/project/myService.svc/FileUpload

Si vous voulez dire qu'il s'agit de l'adresse que vous donnez à votre code client, je pense qu'elle devrait l'être :

http://localhost/project/myService.svc

0voto

sandeep Points 11

Vous devez ajouter dans web.config

<endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/>  

<bindings>  
    <customBinding>  
        <binding name="basicConfig">  
            <binaryMessageEncoding/>  
            <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>  
        </binding>  
    </customBinding>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X