Wie kann ich das Verhalten von WCF WebHTTP Kopfverben akzeptieren?
-
21-09-2019 - |
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();
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.