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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top