Serviço WCF Devolver "o Método Não Permitido"
-
09-06-2019 - |
Pergunta
No processo de desenvolvimento do meu primeiro serviço WCF e quando eu tento usá-lo, recebo o Método não Permitido", sem mais nenhuma explicação.
Eu tenho a minha interface com o ServiceContract e OperationContract:
[OperationContract]
void FileUpload(UploadedFile file);
Juntamente com o método real:
public void FileUpload(UploadedFile file) {};
Para acessar o Serviço de eu entrar http://localhost/project/myService.svc/FileUpload mas eu tenho o "Método não Permitido" erro
Eu estou faltando alguma coisa?
Solução
Seu navegador está enviando uma solicitação HTTP GET:Certifique-se de que você tem os atributos webget atributo em operação no 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.
}
Outras dicas
Se você estiver usando o [WebInvoke(Method="GET")]
atributo no serviço de método, certifique-se de que você digitou o nome do método "GET" e não "Get" ou "get", pois é sensível a maiúsculas e minúsculas!Eu tive o mesmo erro e ele me levou uma hora para descobrir o que fora.
O basic tipos intrínsecos (por exemplo, byte
, int
, string
, e matrizes) será serializado automaticamente pelo WCF.Classes personalizadas, como o seu UploadedFile, não vai ser.
Então, uma pergunta idiota (mas eu tenho que perguntar isso...):é UploadedFile marcado como um [DataContract]
?Se não, você precisará certifique-se de que ele é, e que cada um dos membros da classe que você deseja enviar está marcado com [DataMember].
Ao contrário de sistema de interacção remota, onde a marcação de uma classe com [XmlSerializable permitiu a serializar a classe inteira sem se preocupar em marcar os membros que você queria serializado, o WCF precisa de você para marcar cada membro.(Eu acredito que isso está mudando em .NET 3.5 SP1...)
Um tremendo recurso para o WCF, o desenvolvimento daquilo que conhecemos em nossa loja, como "o livro de peixes": Programação de Serviços WCF por Juval Lowy.Ao contrário de alguns dos outros WCF livros, que são um pouco seca e acadêmico, este toma uma abordagem prática para a construção de serviços WCF e é realmente útil.Totalmente recomendado.
Parece que você está usando um endereço incorreto:
Para acessar o Serviço de eu entrar http://localhost/project/myService.svc/FileUpload
Supondo que você quer dizer que este é o endereço que você dê o seu código de cliente, em seguida, eu suspeito que ele realmente deve ser:
http://localhost/project/myService.svc
Eu tenho tido esse mesmo problema por mais de um dia, agora finalmente descobri.Graças a @Sameh para a dica.
O seu serviço é, provavelmente, a trabalhar muito bem.Teste de POSTAGEM de mensagens usando a barra de endereços de um navegador não funciona.Você precisa usar o Fiddler para testar uma mensagem de POSTAGEM.
Fiddler instruções...http://www.ehow.com/how_8788176_do-post-using-fiddler.html
Apenas os métodos com atributos webget pode ser acessado a partir do navegador IE ;você pode acessar outros verbos de http por apenas digitando o endereço
Você pode tentar Restful de inicialização do serviço do kit de codeples ou use o fiddler para testar seus outros verbos de http
você precisa adicionar 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>
Meu caso:configurar o serviço no novo servidor.ASP.NET 4.0 não foi instalada correctamente registado;svc extensão não foi reconhecido.