블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 
 
당연히 될줄 알았지만 생각보다 쉽게 된다.
==
15 private void SetCaching(WebOperationContext context, DateTime lastModifiedDate, Int32 maxCacheAge){
16    
17     // set CacheControl header
18     HttpResponseHeader cacheHeader = HttpResponseHeader.CacheControl;
19     String cacheControlValue = String.Format("max-age={0}, must-revalidate", maxCacheAge);
20     context.OutgoingResponse.Headers.Add(cacheHeader, cacheControlValue);
21
22     // set cache validation
23     context.OutgoingResponse.LastModified = lastModifiedDate;
24     String eTag = context.IncomingRequest.UriTemplateMatch.RequestUri.ToString() + lastModifiedDate.ToString();
25     context.OutgoingResponse.ETag = eTag;
26
27 }
==
원본 http://blogs.msdn.com/b/justinjsmith/archive/2007/08/22/setting-http-headers-in-wcf-net-3-5.aspx

WCF가 예전에 REST 지원한다는 이야기가 생각나서, SDP 플랫폼 구현 가능성 체크해볼라고 간략하게 체크해봤다.
WCF에서 REST개발은 별도의 라이브러리가 필요하다. VS2010환경에 낮선 나로써는 좀 더 쉬운 방법을 찾아야 했는데, Project Template이 REST용으로 세팅되어 있는게 있다.
New > Project에서 Online Template을 선택한후에, WCF REST C# 템플릿을 선택하면 된다.

사용자 삽입 이미지


자동으로 생성된 코드를 체크하고, 간단하게 테스트를 해봤는데... 일단 잘된다.
프로그래밍 모델도 자바의 Jersey나 Apache CXF와 비슷하다 (JAX-RS 스펙과 유사)

    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    // NOTE: If the service is renamed, remember to update the global.asax.cs file
    public class Service1
    {
        // TODO: Implement the collection resource that will contain the SampleItem instances

        [WebGet(UriTemplate = "")]
        public List<SampleItem> GetCollection()
        {
            // TODO: Replace the current implementation to return a collection of SampleItem instances
            return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
        }

코드가 이런데, 테스트를 해보면 다음과 같은 결과가 나온다.

사용자 삽입 이미지

일단은 합격점인데.. 조금더 살펴보아야할점이 Annotation이 얼마나 다양하냐이다.
1. 위의 결과값처럼 List에 대한 리턴 XmlElement가 ArrayOf로 시작한다. 실제 REST에서는 이걸 마음대로 바꿀 수 있어야 하고
2. Namesapce역시 scheme를 여기 넣는 디자인이 있을 수 있기 때문에, name space를 마음대로 지정할 수 있는지.
3. 그리고 HTTP Header에 얼마나 데이타를 쉽게 조작할 수 있는지가 관건이다.

개발환경이나 세팅이 자바에 비해서 쉽기는 한데.. (WAS설치나 Library 설치). 이상하게도 WCF 4.0에 REST 프레임웍이 기본 번들이 안되어 있어서 찜찜하기는 하다...

그리고 MS의 장점이겠지만, 문서화는 진짜 잘되어 있다.
http://msdn.microsoft.com/en-us/library/dd203052.aspx 참고 자료.
예전 Jersey가지고 REST설계할때 SPEC때문에 고민도 많이하고 스터디도 많이 했는데, 참 잘나와 있는듯...

참고자료
http://techsavygal.wordpress.com/2009/03/10/getting-started-with-rest-in-wcf/