Pergunta

Eu tenho um serviço WCF hospedado em um serviço do Windows. Eu adicionei a ele um webhttpbinding com um comportamento WebHTTP e, sempre que envio uma solicitação GET, recebo HTTP 200, que é o que eu quero, o problema é que eu recebo um HTTP 405 sempre que envio uma solicitação de cabeça.

Existe uma maneira de fazê -lo retornar o HTTP 200 também para a cabeça? É mesmo possível?

EDIT: Esse é o contrato de operação:

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

Solução

[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();

    }
}

O código acima funciona bem. Recebo um 405 (método não permitido) na solicitação da cabeça. A versão do Assembly que estou usando é System.Servicemodel.Web, versão = 3.5.0.0, Culture = Neutro, PublicKeyToken = 31BF3856AD364E35.

Na verdade, tanto quanto eu sei, não há maneira direta de permitir. ..

[ServiceContract]
public interface IService
{
    [OperationContract]

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

Serviço de classe pública: ISERVICE { #MEMBROS ISVICE

    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
}

Outras dicas

Parece um bug sério no serviço (ou mesmo na estrutura). O suporte para a cabeça no HTTP/1.1 não é de forma alguma opcional.

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