Domanda

Ho un servizio WCF ospitato in un servizio di Windows. Ho aggiunto ad essa un webHttpBinding con un comportamento webHttp e ogni volta che mando una richiesta GET HTTP ottengo 200 che è quello che voglio, il problema è ottengo un HTTP 405 ogni volta che mando una richiesta HEAD.

C'è un modo per farlo tornare http 200 anche per TESTA? E 'anche possibile?

modifica: questo è il contratto di funzionamento:

    [OperationContract]
    [WebGet(UriTemplate = "MyUri")]
    Stream MyContract();
È stato utile?

Soluzione

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

    }
}

Il codice sopra funziona bene. Ho un 405 (Metodo non consentito) su richiesta HEAD. La versione di assemblaggio che sto usando è System.ServiceModel.Web, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35.

In realtà, per quanto ne so non c'è modo dritto in avanti di permettere it.However si potrebbe provare qualcosa di simile alla soluzione below..But questo deve essere fatto per ogni metodo che ha bisogno di GET e HEAD, che lo rende un non soluzione in modo elegante ..

[ServiceContract]
public interface IService
{
    [OperationContract]

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

Servizio public class: IService     {         #region IService Utenti

    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
}

Altri suggerimenti

Suona come un grave bug nel servizio (o anche il quadro). Il supporto per HEAD in HTTP / 1.1 non è in alcun modo facoltativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top