Frage

Ich habe einen WCF -Dienst, der in einem Windows -Dienst gehostet wird. Ich habe zu einem webhttpbinding mit einem webhttp -Verhalten hinzugefügt, und wenn ich ihm eine Get -Anfrage sende, erhalte ich HTTP 200.

Gibt es eine Möglichkeit, HTTP 200 auch für den Kopf zurückzugeben? Ist das überhaupt möglich?

Bearbeiten: Das ist der Betriebsvertrag:

    [OperationContract]
    [WebGet(UriTemplate = "MyUri")]
    Stream MyContract();
War es hilfreich?

Lösung

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

    }
}

Der obige Code funktioniert einwandfrei. Ich erhalte eine 405 (Methode nicht erlaubt) auf Kopfanfrage. Die Version der Versammlung, die ich verwende, ist System.Servicemodel.Web, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31BF3856AD364E35.

Soweit ich weiß, gibt es keine direkte Möglichkeit, es zuzulassen. Sie können jedoch so etwas wie die folgende Lösung ausprobieren. Aber dies muss für jede Methode erfolgen, die erhalten und Kopf ist, was es zu einer nicht so eleganten Lösung macht ..

[ServiceContract]
public interface IService
{
    [OperationContract]

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

öffentlicher Klassendienst: Iservice {#region iService Mitglieder

    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
}

Andere Tipps

Klingt nach einem ernsthaften Fehler im Dienst (oder sogar im Rahmen). Die Unterstützung für Kopf in HTTP/1.1 ist in keiner Weise optional.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top