Domanda

Nel processo di sviluppo del mio primo servizio WCF e quando provo a utilizzarlo ricevo "Metodo non consentito" senza altra spiegazione.

Ho configurato la mia interfaccia con ServiceContract e OperationContract:

    [OperationContract]
    void FileUpload(UploadedFile file);

Insieme al metodo vero e proprio:

    public void FileUpload(UploadedFile file) {};

Per accedere al Servizio entro http://localhost/project/myService.svc/FileUploadma ricevo l'errore "Metodo non consentito".

Mi sto perdendo qualcosa?

È stato utile?

Soluzione

Il tuo browser sta inviando una richiesta HTTP GET:Assicurati di avere l'attributo WebGet sull'operazione nel contratto:

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

Altri suggerimenti

Se stai utilizzando il [WebInvoke(Method="GET")] attributo sul metodo del servizio, assicurati di scrivere il nome del metodo come "GET" e non "Get" o "get" poiché fa distinzione tra maiuscole e minuscole!Ho avuto lo stesso errore e mi ci è voluta un'ora per capirlo.

I tipi intrinseci di base (ad es. byte, int, string, e matrici) verranno serializzati automaticamente da WCF.Le classi personalizzate, come il tuo UploadedFile, non lo saranno.

Quindi, una domanda stupida (ma devo farla...):è il file caricato contrassegnato come a [DataContract]?In caso contrario, dovrai assicurarti che lo sia e che ciascuno dei membri della classe che desideri inviare sia contrassegnato con [DataMember].

A differenza dei servizi remoti, in cui contrassegnare una classe con [XmlSerializable] ti consentiva di serializzare l'intera classe senza preoccuparti di contrassegnare i membri che volevi serializzare, WCF richiede che tu contrassegni ciascun membro.(Credo che questo stia cambiando in .NET 3.5 SP1...)

Una straordinaria risorsa per lo sviluppo della WCF è ciò che nel nostro negozio chiamiamo "il libro del pesce": Programmazione dei servizi WCF di Juval Lowy.A differenza di altri libri WCF in circolazione, che sono un po' aridi e accademici, questo adotta un approccio pratico alla creazione dei servizi WCF ed è effettivamente utile.Altamente raccomandato.

Sembra che tu stia utilizzando un indirizzo errato:

Per accedere al Servizio entro http://localhost/project/myService.svc/FileUpload

Supponendo che tu intenda che questo è l'indirizzo che fornisci al tuo codice cliente, sospetto che in realtà dovrebbe essere:

http://localhost/project/myService.svc

E' più di un giorno che ho lo stesso problema, finalmente ho risolto.Grazie a @Sameh per il suggerimento.

Probabilmente il tuo servizio funziona bene.Testare i messaggi POST utilizzando la barra degli indirizzi di un browser non funzionerà.È necessario utilizzare Fiddler per testare un messaggio POST.

Istruzioni per il violinista...http://www.ehow.com/how_8788176_do-post-using-fiddler.html

Dal browser IE è possibile accedere solo ai metodi con WebGet;puoi accedere ad altri verbi http semplicemente digitando l'indirizzo

Puoi provare il kit di avvio del servizio Restful di codeples o utilizzare Fiddler per testare gli altri verbi http

è necessario aggiungere 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> 

Il mio caso:configurazione del servizio su nuovo server.ASP.NET 4.0 non è stato installato/registrato correttamente;L'estensione svc non è stata riconosciuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top