2012-04-08 7 views
2

WebInvoke 특성이 GET을 메서드로 사용할 수 있습니까? 나는 마이크로 소프트 문서에서 이것에 대한 어떤 생각을 볼 수 없다. 비록 일부 포럼 예제에서 사용되는 것을 보았습니다.WCF WebInvoke 특성을 GET 메서드로 사용할 수 있습니까?

webInvoke를 사용할 때 게시, 게시 및 삭제할 수 있으므로 원칙적으로 그렇게해서는 안됩니다. 대조적으로 WebGet을 사용하면 HTTP를 통해 GET 동사 만 사용할 수 있습니다. 즉, 게시, 삭제 및 넣을 수 없습니다. 이제 Get-operations은 데이터를 수정해서는 안되며 W3org에 따라 멱등하고 WebInvoke 특성의 옵션이 될 수 없습니다. 누군가 WebInvoke 특성에서 GET 동사의 역할 또는 존재를 지적 할 수 있습니까? 특히 REST 프로그래밍의 맥락에서 그렇습니다.

답변

4

WebInvoke은 GET을 포함한 모든 HTTP 동사의 일반적인 특성입니다. GET과 함께 사용하는 경우 모든 GET의 제한 사항을 따라야합니다. 작업 매개 변수는 URI 경로 인수에 매핑 된 단순 유형이어야합니다.

WebGet 그냥 GET 동사위한 것이며 이럴는 GET과 다른 동사 사이의 차이를 보여주기 위해 주로 존재 (멱등해야 GET을, 등 몸이없는 GET)

에서 가장 중요한 방법입니다. NET 이러한 속성을 사용하는 것은 내부 GetWebMethod입니다 :

internal static string GetWebMethod(OperationDescription od) 
{ 
    WebGetAttribute wga = od.Behaviors.Find<WebGetAttribute>(); 
    WebInvokeAttribute wia = od.Behaviors.Find<WebInvokeAttribute>(); 
    EnsureOk(wga, wia, od); 
    if (wga != null) 
    { 
     return "GET"; 
    } 
    if (wia == null) 
    { 
     return "POST"; 
    } 
    return (wia.Method ?? "POST"); 
} 

정상적으로 처리 WebInvoke에 대한 방법을 GET 볼 수 있듯이.

+0

Perfect. 대단히 감사합니다. 특히 코드를 설명해 주셔서 감사합니다. 다시 말해서 WebInvoke와 WebGet을 사용할 때 WebInvoke와 WebGet은 특성을 검사하는 디스패치 루틴으로 이동합니다 (속성은 'get'또는 'post'입니다).이 검사의 결과는 다음 해석에 결정적입니다. "명령". GetWebMethod는 일종의 프레임 워크 내부 필터입니다. GetWebMethod는 어디서 볼 수 있습니까? 나는 serviceModel 클래스 계층 구조를 연구하여 추측한다. – netfed

+1

'GetWebMethod'는 WCF의 내부 메소드입니다. Reflector와 같은 도구를 사용하여 찾을 수 있습니다. –