Pregunta

Tengo un servicio de WCF alojado en un servicio de Windows. He añadido a un webHttpBinding con un comportamiento webHttp y cada vez que lo envío de una solicitud GET HTTP GET I 200, que es lo que quiero, es un problema consigo un HTTP 405 cada vez que se lo envío una petición HEAD.

¿Hay una manera de hacerlo volver http 200 también para la cabeza? ¿Es eso posible?

editar: ese es el contrato de operación:

    [OperationContract]
    [WebGet(UriTemplate = "MyUri")]
    Stream MyContract();
¿Fue útil?

Solución

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet(UriTemplate="/data")]
    string GetData();
}

public class Service : IService
{
    #region IService Members

    public string GetData()
    {
        return "Hello";

    }

    #endregion
}

public class Program
{
    static void Main(string[] args)
    {
        WebHttpBinding binding = new WebHttpBinding();
        WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://localhost:9876/MyService"));
        host.AddServiceEndpoint(typeof(IService), binding, "http://localhost:9876/MyService");
        host.Open();
        Console.Read();

    }
}

El código anterior funciona bien. Consigo un 405 (Método no permitido) a petición HEAD. La versión de montaje que estoy usando es System.ServiceModel.Web, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35.

En realidad, por lo que yo sé que no hay manera directa de permitir it.However usted podría intentar algo así como la solución below..But esto tiene que ser hecho para cada método que las necesidades GET y HEAD, lo que hace que sea un no solución tan elegante ..

[ServiceContract]
public interface IService
{
    [OperationContract]

    [WebInvoke(Method = "*", UriTemplate = "/data")]        
    string GetData();
}

Servicio public class: IService     {         #REGION miembros IService

    public string GetData()
    {
        HttpRequestMessageProperty request = 
            System.ServiceModel.OperationContext.Current.IncomingMessageProperties["httpRequest"] as HttpRequestMessageProperty;

        if (request != null)
        {
            if (request.Method != "GET" || request.Method != "HEAD")
            {
                //Return a 405 here.
            }
        }

        return "Hello";

    }

    #endregion
}

Otros consejos

suena como un grave error en el servicio (o incluso el marco). Apoyo para la cabeza en HTTP / 1.1 es de ninguna manera opcional.

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