Serviço WCF Retornando “Método Não Permitido”

No processo de desenvolvimento do meu primeiro serviço WCF e quando tento usá-lo, recebo “Método não permitido” sem outra explicação.

Eu tenho minha interface configurada com o ServiceContract e OperationContract:

[OperationContract] void FileUpload(UploadedFile file); 

Junto com o método atual:

  public void FileUpload(UploadedFile file) {}; 

Para acessar o Serviço, insiro http: //localhost/project/myService.svc/FileUpload, mas recebo o erro “Método não permitido”

Estou esquecendo de algo?

Seu navegador está enviando uma solicitação HTTP GET: Certifique-se de ter o atributo WebGet na operação do contrato:

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

Se você estiver usando o [WebInvoke(Method="GET")] no método de serviço, certifique-se de soletrar o nome do método como “GET” e não “Get” ou “get”, pois é sensível a maiúsculas e minúsculas! Eu tive o mesmo erro e levei uma hora para descobrir isso.

Os tipos básicos intrínsecos (por exemplo, byte , int , string e arrays) serão serializados automaticamente pelo WCF. Classes personalizadas, como o seu UploadedFile, não serão.

Então, uma pergunta boba (mas eu tenho que perguntar …): UploadedFile é marcado como [DataContract] ? Caso contrário, você precisará ter certeza de que está e de que cada um dos membros da class que deseja enviar esteja marcado com [DataMember].

Ao contrário do remoting, onde marcar uma class com [XmlSerializable] permitia serializar toda a class sem se preocupar em marcar os membros que você desejava serializados, o WCF precisa que você marque cada membro. (Eu acredito que isso está mudando no .NET 3.5 SP1 …)

Um tremendo recurso para o desenvolvimento de WCF é o que conhecemos em nossa loja como “o livro de peixes”: Programando Serviços WCF por Juval Lowy. Ao contrário de alguns dos outros livros do WCF, que são um pouco secos e acadêmicos, esse método tem uma abordagem prática para construir serviços WCF e é realmente útil. Completamente recomendado.

Parece que você está usando um endereço incorreto:

Para acessar o Serviço, insiro http: //localhost/project/myService.svc/FileUpload

Supondo que você queira dizer que este é o endereço que você deu ao seu código de cliente, então eu suspeito que ele deveria ser:

 http://localhost/project/myService.svc 

Eu tenho tido esse mesmo problema por mais de um dia agora – finalmente descobri. Graças a @Sameh pela dica.

Seu serviço provavelmente está funcionando bem. Testar mensagens do POST usando a barra de endereços de um navegador não funcionará. Você precisa usar o Fiddler para testar uma mensagem do POST.

Instruções do violinista … http://www.ehow.com/how_8788176_do-post-using-fiddler.html

Somente methods com WebGet podem ser acessados ​​a partir do navegador IE; você pode acessar outros verbos http digitando apenas o endereço

Você pode tentar o kit de boot do serviço Restful de codeples ou usar o fiddler para testar seus outros verbos http

você precisa adicionar no web.config

         

Meu caso: configurando o serviço no novo servidor. O ASP.NET 4.0 não foi instalado / registrado corretamente; a extensão svc não foi reconhecida.