Frage

Während ich meinen ersten WCF-Dienst entwickle und versuche, ihn zu verwenden, erhalte ich die Meldung „Methode nicht zulässig“ ohne weitere Erklärung.

Ich habe meine Schnittstelle mit ServiceContract und OperationContract eingerichtet:

    [OperationContract]
    void FileUpload(UploadedFile file);

Zusammen mit der eigentlichen Methode:

    public void FileUpload(UploadedFile file) {};

Um auf den Dienst zuzugreifen, gebe ich ein http://localhost/project/myService.svc/FileUploadaber ich erhalte die Fehlermeldung „Methode nicht zulässig“.

Vermisse ich etwas?

War es hilfreich?

Lösung

Ihr Browser sendet eine HTTP-GET-Anfrage:Stellen Sie sicher, dass Sie das WebGet-Attribut für den Vorgang im Vertrag haben:

[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.
 }

Andere Tipps

Wenn Sie das verwenden [WebInvoke(Method="GET")] Attribut für die Dienstmethode verwenden, stellen Sie sicher, dass Sie den Methodennamen als „GET“ und nicht als „Get“ oder „get“ buchstabieren, da die Groß-/Kleinschreibung beachtet wird!Ich hatte den gleichen Fehler und es dauerte eine Stunde, bis ich ihn herausgefunden hatte.

Die grundlegenden intrinsischen Typen (z. B. byte, int, string, und Arrays) werden von WCF automatisch serialisiert.Benutzerdefinierte Klassen wie Ihre UploadedFile werden nicht verfügbar sein.

Also eine dumme Frage (aber ich muss sie stellen...):ist UploadedFile als markiert [DataContract]?Wenn nicht, müssen Sie sicherstellen, dass dies der Fall ist und dass alle Mitglieder in der Klasse, die Sie senden möchten, mit [DataMember] gekennzeichnet sind.

Im Gegensatz zum Remoting, bei dem Sie durch Markieren einer Klasse mit [XmlSerializable] die gesamte Klasse serialisieren konnten, ohne sich die Mühe machen zu müssen, die Mitglieder zu markieren, die Sie serialisieren wollten, müssen Sie bei WCF jedes Mitglied markieren.(Ich glaube, das ändert sich in .NET 3.5 SP1 ...)

Eine enorme Ressource für die WCF-Entwicklung ist das, was wir in unserem Shop als „das Fischbuch“ kennen: WCF-Dienste programmieren von Juval Lowy.Im Gegensatz zu einigen anderen WCF-Büchern, die etwas trocken und akademisch sind, verfolgt dieses einen praktischen Ansatz zum Aufbau von WCF-Diensten und ist tatsächlich nützlich.Absolut empfehlenswert.

Es hört sich so an, als ob Sie eine falsche Adresse verwenden:

Um auf den Dienst zuzugreifen, gebe ich ein http://localhost/project/myService.svc/FileUpload

Angenommen, Sie meinen, dass dies die Adresse ist, die Sie Ihrem Client-Code geben, dann vermute ich, dass es tatsächlich so sein sollte:

http://localhost/project/myService.svc

Ich habe jetzt seit über einem Tag das gleiche Problem und habe es endlich herausgefunden.Danke an @Sameh für den Hinweis.

Ihr Dienst funktioniert wahrscheinlich einwandfrei.Das Testen von POST-Nachrichten über die Adressleiste eines Browsers funktioniert nicht.Sie müssen Fiddler verwenden, um eine POST-Nachricht zu testen.

Fiddler-Anleitung...http://www.ehow.com/how_8788176_do-post-using-fiddler.html

Vom Browser-IE aus kann nur auf Methoden mit WebGet zugegriffen werden.Sie können auf andere http-Verben zugreifen, indem Sie einfach die Adresse eingeben

Sie können entweder das Restful Service Startup Kit von Codeples ausprobieren oder Fiddler verwenden, um Ihre anderen http-Verben zu testen

Sie müssen web.config hinzufügen

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

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

Mein Fall:Konfigurieren des Dienstes auf einem neuen Server.ASP.NET 4.0 wurde nicht ordnungsgemäß installiert/registriert;SVC-Erweiterung wurde nicht erkannt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top