WCF Service Returning “Método no permitido”

En el proceso de desarrollo de mi primer servicio WCF y cuando trato de usarlo obtengo “Método no permitido” sin otra explicación.

Tengo mi interfaz configurada con ServiceContract y OperationContract:

[OperationContract] void FileUpload(UploadedFile file); 

Junto con el método real:

  public void FileUpload(UploadedFile file) {}; 

Para acceder al Servicio, ingreso http: //localhost/project/myService.svc/FileUpload pero aparece el error “Método no permitido”

¿Me estoy perdiendo de algo?

Su navegador está enviando una solicitud HTTP GET: asegúrese de tener el atributo WebGet en la operación del 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. } 

Si está utilizando el [WebInvoke(Method="GET")] en el método de servicio, asegúrese de deletrear el nombre del método como “GET” y no “Get” u “get”, ya que distingue entre mayúsculas y minúsculas. Tuve el mismo error y me llevó una hora descubrirlo.

Los tipos intrínsecos básicos (por ejemplo, byte , int , string y arrays) serán serializados automáticamente por WCF. Las clases personalizadas, como su UploadedFile, no lo serán.

Entonces, una pregunta tonta (pero tengo que preguntarlo …): ¿está UploadedFile marcado como [DataContract] ? De lo contrario, deberá asegurarse de que así sea y de que cada uno de los miembros de la clase que desee enviar esté marcado con [DataMember].

A diferencia de la interacción remota, donde marcar una clase con [XmlSerializable] le permitió serializar toda la clase sin molestarse en marcar los miembros que desea serializar, WCF necesita que marque cada miembro. (Creo que esto está cambiando en .NET 3.5 SP1 …)

Un recurso tremendo para el desarrollo de WCF es lo que conocemos en nuestra tienda como “el libro de los peces”: Progtwigción de WCF Services por Juval Lowy. A diferencia de algunos de los otros libros de WCF, que son un tanto áridos y académicos, este tiene un enfoque práctico para la construcción de servicios WCF y es realmente útil. Completamente recomendado.

Parece que estás usando una dirección incorrecta:

Para acceder al Servicio, ingreso http: //localhost/project/myService.svc/FileUpload

Suponiendo que te refieres a que esta es la dirección que le das a tu código de cliente, entonces sospecho que debería ser:

 http://localhost/project/myService.svc 

He tenido este mismo problema durante más de un día, finalmente lo descubrí. Gracias a @Sameh por la pista.

Tu servicio probablemente esté funcionando bien. Probar los mensajes POST utilizando la barra de direcciones de un navegador no funcionará. Necesita usar Fiddler para probar un mensaje POST.

Instrucciones de Fiddler … http://www.ehow.com/how_8788176_do-post-using-fiddler.html

Solo se puede acceder a los métodos con WebGet desde el navegador IE; puedes acceder a otros verbos de http simplemente escribiendo la dirección

Puede probar el kit de inicio de servicio Restful de codeples o usar el violín para probar sus otros verbos http

necesitas agregar en web.config

         

Mi caso: configuración del servicio en el nuevo servidor. ASP.NET 4.0 no se instaló / registró correctamente; la extensión svc no fue reconocida.