블로그 이미지
Sunny's

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2011. 5. 12. 19:51 ASP.NET



  1. Routing Service in WCF
  2. Service Discovery(Ad-hoc)
  3. Web Service Programming(REST)
 
WCF 서비스는 기본적으로 ASP.NET 기능을 지원하지 않습니다만 , 제한적으로 Aspnet Compatibility Mode 를 이용해서 부분적으로 ASP.NET 기능을 활성화 시킬수 있습니다. 이 부분은 WCF 에서 쿠키사용하기 (http://www.hoons.kr/Lecture/LectureView.aspx?BoardIdx=20574&kind=32) 를 참조하시기 바랍니다. 
 
WCF 4.0 에서는 WebProtocolException , RequestInterceptor , WebCacheAttribute 클래스를 추가하여 웹 환경에서의 스팩을 보다 강화하였습니다. 또한 POST , GET 외에 PUT , DELETE 도 추가로 지원하여 , 그간 반쪽짜리로 구현되었던 REST 를 완벽하게 지원하게 되었습니다. 

* REST 서비스에 대한 개념과 기존 REST 구현은 여기를 참조해주세요(http://www.hoons.kr/Lecture/LectureView.aspx?BoardIdx=375&kind=32
 


그럼 이제 WCF 4.0 에서의 REST 서비스를 구현해 보도록 하겠습니다. 
 
먼저 WCF 서비스를 생성한후 web.config 를 아래와 같이 설정합니다. 
<?xml version="1.0"?> 
<configuration
<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
</system.web> 
<system.serviceModel>  
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"></serviceHostingEnvironment> 
<services> 
<service name="WCFRest.Service1"
<endpoint address="" binding="webHttpBinding" contract="WCFRest.IService1" behaviorConfiguration="EdpHelpBehavior"> 
</endpoint> 
</service> 
</services> 
<behaviors>  
<endpointBehaviors>  
<behavior name="EdpHelpBehavior"> 
<webHttp helpEnabled="true"/>  
</behavior> 
</endpointBehaviors> 
</behaviors> 
</system.serviceModel>  
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
</configuration>
[코드1. REST 서비스 설정을 위한 web.config ] 
 
노란색으로 표기된 부분이 REST 서비스를 사용하기 위해 설정해야 하는 부분입니다. 이는 기존 3.5에 있던 방식과 동일합니다. 
 
이제 프로젝트를 빌드하고 서비스를 열어보겠습니다. 
 

[그림1. REST 구동 화면
 
4.0 에서는 새롭게 REST 서비스에 대해 호출여부를 판별할수 있는 help 페이지를 제공합니다. 


[그림2. REST Help 페이지
 
헬프 페이지는 간략하게 자신이 생성한 WCF 서비스를 REST 로 호출할수 있게 해줍니다. 
 


[그림3. REST 서비스 실행 결과
 
해당 help 페이지 대로 호출한 결과입니다. 정상적으로 REST 서비스가 동작함을 확인할수 있습니다. 
 

WebCacheAttribute 
 
이제 WCF 에서도 페이지단위로 캐싱된 결과물을 내려줄수 있습니다. 
 
System.Web 엘리먼트 안에 캐시 관련 항목을 삽입합니다. 
 
<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
<caching> 
<outputCacheSettings> 
<outputCacheProfiles> 
<add name="CacheResponse" duration="60" varyByParam="format"/> 
</outputCacheProfiles> 
</outputCacheSettings> 
</caching> 
</system.web>
[코드2 . 캐싱 적용을 위한 web.config 설정
 
코드에 다음 어트리뷰트를 삽입합니다. 해당 코드에서는 캐쉬 시간을 60초로 설정하였습니다. 

[OperationContract
[WebGet
[AspNetCacheProfile("CacheResponse")] 
string GetData(int value); 
[코드3 .WCF 코드에 Cache 설정
 
캐싱에 사용될 설정을 가져옵니다. 
 
 

[그림4 .캐싱이 적용되지 않은 페이지 헤더
 
캐싱이 적용되지 않은 페이지의 헤더 정보 입니다. 

 

[그림5 .캐싱이 적용된 페이지 헤더
  
캐싱이 적용된 후 헤더입니다. Cache-Control 에 max-age=60 값이 추가된 것을 확인할수 있습니다. 
 

Summary 

이상으로 WCF 4.0 에 추가된 기능들에 대해 간략하게 알아보았습니다. WCF 3.5 에 비해 진입장벽은 현저히 낮아졌으며 , 추가 기능들은 매우 강력합니다. 이전에 MS 측 관계자와 asmx 서비스를 더 이상 사용하지 않는 방안에 대해 살짝 논의한적이 있었습니다. (공식적인 입장은 아닙니다.) WCF 서비스는 더 이상 asmx 의 대체적인 성격이 아닌 , asmx 의 차세대 버전이라고 생각해도 좋을거 같습니다. 흥미로운 기능들이 많이 포함된 새로운 WCF를 한번 즐겨보시기 바랍니다 ^^ 
-fin 

출처 :  http://loveciel.tistory.com/entry/What’s-new-in-WCF-40
posted by Sunny's