Question

Dans le processus de développement de mon premier service WCF et lorsque j'essaie de l'utiliser, j'obtiens "Méthode non autorisée" sans autre explication.

J'ai configuré mon interface avec ServiceContract et OperationContract :

    [OperationContract]
    void FileUpload(UploadedFile file);

Avec la méthode réelle :

    public void FileUpload(UploadedFile file) {};

Pour accéder au Service, j'entre http://localhost/project/myService.svc/FileUploadmais j'obtiens l'erreur "Méthode non autorisée"

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

Était-ce utile?

La solution

Votre navigateur envoie une requête HTTP GET :Assurez-vous d'avoir 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.
 }

Autres conseils

Si vous utilisez le [WebInvoke(Method="GET")] sur la méthode de service, assurez-vous d'épeler le nom de la méthode comme "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 comprendre.

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

Alors, une question bête (mais je dois la poser...) :est UploadedFile marqué comme [DataContract]?Sinon, vous devrez vous assurer que c'est le cas et que chacun des membres de la classe que vous souhaitez envoyer est marqué de [DataMember].

Contrairement à l'accès à distance, où le marquage d'une classe avec [XmlSerializing] vous permettait de sérialiser la classe entière sans vous soucier de marquer les membres que vous souhaitiez sérialiser, WCF a besoin que vous marquiez chaque membre.(Je crois que cela change dans .NET 3.5 SP1...)

Une ressource formidable pour le développement de WCF est ce que nous appelons dans notre boutique « le livre du poisson » : Programmation des services WCF par Juval Lowy.Contrairement à certains autres livres WCF, qui sont un peu secs et académiques, celui-ci adopte une approche pratique pour créer des services WCF et est réellement utile.Fortement recommandé.

Il semble que vous utilisiez une adresse incorrecte :

Pour accéder au Service, j'entre http://localhost/project/myService.svc/FileUpload

En supposant que vous voulez dire que c'est l'adresse que vous donnez à votre code client, je suppose qu'elle devrait en fait être :

http://localhost/project/myService.svc

J'ai ce même problème depuis plus d'une journée maintenant - j'ai enfin compris.Merci à @Sameh pour l'indice.

Votre service fonctionne probablement très bien.Tester les messages POST à ​​l'aide de la barre d'adresse d'un navigateur ne fonctionnera pas.Vous devez utiliser Fiddler pour tester un message POST.

Instructions pour le violoniste...http://www.ehow.com/how_8788176_do-post-using-fiddler.html

Seules les méthodes avec WebGet sont accessibles depuis le navigateur IE ;vous pouvez accéder à d'autres verbes http en tapant simplement l'adresse

Vous pouvez soit essayer le kit de démarrage du service Restful de codeples, soit utiliser fiddler pour tester vos autres verbes http.

vous devez ajouter 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> 

Mon cas:configuration du service sur un nouveau serveur.ASP.NET 4.0 n'a pas été installé/enregistré correctement ;L'extension svc n'a pas été reconnue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top