2009-09-07 3 views
3

Windows 서비스에서 호스팅되는 WCF 서비스가 있습니다. webHttpBinding을 webHttp 비헤이비어로 추가했는데 GET 요청을 보낼 때마다 내가 원한 HTTP 200을 얻습니다. 문제는 HEAD 요청을 보낼 때마다 http 405가 발생한다는 것입니다.WCF webHttp 동작을 만드는 방법 HEAD 동사를 허용 하시겠습니까?

HEAD에 http 200을 반환하는 방법이 있습니까? 그게 가능합니까?

편집 :

[OperationContract] 
    [WebGet(UriTemplate = "MyUri")] 
    Stream MyContract(); 
+0

당신이 HEAD 동사의 운영 계약을하시기 바랍니다 게시 할 수 있습니까? –

+0

[OperationContract] [WebGet (UriTemplate = "MyUri")] Stream MyContract(); –

+3

3 년 후 여전히 문제가 있습니까? 나는 이것에 대한 해결책이 필요하다. –

답변

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

    } 
} 

위의 코드는 정상적으로 작동합니다. 나는 HEAD 요청에 대해 405 (Method not allowed)를 얻는다. 사용중인 어셈블리의 버전은 System.ServiceModel.Web, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35입니다.

실제로 내가 아는 바로는 그것을 허용하는 직접적인 방법이 없다는 것입니다. 그러나 다음과 같은 해결책을 시도해 볼 수는 있습니다.하지만 GET 및 HEAD가 필요한 각 방법에 대해이 작업을 수행해야합니다. 그리 우아한 해결책 ..

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 

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

공용 클래스 서비스 : IService { # 지역 IService 회원

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 
} 
+0

내 제목이 오도 된 것 같아서 GET뿐 아니라 HEAD 요청에 200을 받고 싶습니다. –

+1

예, Prashanth는 여기에서 옵션을 설명하는 훌륭한 일을 해 왔습니다. 그러나이 질문은 해결되지 않았습니다. HEAD가 웹 서비스 (표준 동사)와 함께 작동하도록해서는 안되는 이유는 없습니다. WCF가 HEAD 요청에 올바르게 응답 할 수있는 방법을 찾아야 겠군. –

1

는 서비스 (또는 프레임 워크)에 심각한 버그 같은 소리 : 그 동작 계약입니다. HTTP/1.1에서 HEAD 지원은 선택 사항이 아닙니다.

관련 문제