Pregunta

En el proceso de desarrollo de mi primer servicio de WCF y cuando trato de usarlo me sale "Método no Permitido" sin ninguna otra explicación.

Tengo mi configuración de interfaz con el ServiceContract y OperationContract:

    [OperationContract]
    void FileUpload(UploadedFile file);

Junto con el método real:

    public void FileUpload(UploadedFile file) {};

Para acceder al Servicio que entrar http://localhost/project/myService.svc/FileUpload pero me sale el "Método no Permitido" error

Me estoy perdiendo algo?

¿Fue útil?

Solución

Su navegador envía una solicitud HTTP GET:Asegúrese de que usted tiene el WebGet atributo en la operación en el 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.
 }

Otros consejos

Si usted está utilizando el [WebInvoke(Method="GET")] atributo en el método de servicio, asegúrese de escribir el nombre del método como "GET" y no "Get" o "get", ya que es sensible a mayúsculas y minúsculas!Yo tenía el mismo error y me tomó una hora para descifrar eso.

El basic intrínseca tipos (por ejemplo, byte, int, string, y arrays) será serializada automáticamente por la WCF.Clases personalizadas, como su UploadedFile, no lo será.

Así, una pregunta tonta (pero tengo que preguntar...):es UploadedFile marcado como un [DataContract]?Si no, usted necesita para asegurarse de que es, y que cada uno de los miembros de la clase a la que desea enviar están marcados con [DataMember].

A diferencia de la comunicación remota, donde marca una clase con [XmlSerializable] permite serializar toda la clase sin molestar a la marca de los miembros que quería serializado, WCF necesidades de marcar cada uno de los miembros.(Creo que esto está cambiando .NET 3.5 SP1...)

Un tremendo recurso para WCF desarrollo es lo que conocemos en nuestra tienda como "el pez libro": Programación de Servicios WCF por Juval Lowy.A diferencia de algunos de los otros WCF libros a su alrededor, que son un poco seco y académico, este requiere un enfoque práctico para la construcción de servicios WCF y es realmente útil.Completamente recomendable.

Suena como que usted está utilizando una dirección incorrecta:

Para acceder al Servicio que entrar http://localhost/project/myService.svc/FileUpload

Suponiendo que esta es la dirección que usted proporcione su código de cliente, a continuación, sospecho que en realidad debería ser:

http://localhost/project/myService.svc

He tenido este mismo problema por más de un día ahora - finalmente entendí.Gracias a @Sameh por la sugerencia.

Su servicio es probablemente trabajando muy bien.Pruebas de enviar mensajes usando la barra de direcciones de un navegador no funciona.Usted necesita usar Fiddler para la prueba de un mensaje de POST.

El violinista instrucciones...http://www.ehow.com/how_8788176_do-post-using-fiddler.html

Sólo los métodos con WebGet se puede acceder desde el navegador IE ;usted puede acceder a otros verbos http por solo escribiendo la dirección de

Usted puede intentar servicio Restful kit de inicio de codeples o usar fiddler para probar sus otros verbos http

usted necesita agregar en la 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> 

Mi caso:configurar el servicio en el nuevo servidor.ASP.NET 4.0 no se ha instalado y registrado correctamente;svc extensión no fue reconocido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top