Como fazer com que o comportamento WCF WebHTTP aceite os verbos da cabeça?
-
21-09-2019 - |
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();
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.