2011. 5. 12. 19:51
ASP.NET
- Routing Service in WCF
- Service Discovery(Ad-hoc)
- 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>
[코드1. REST 서비스 설정을 위한 web.config ] <configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"></serviceHostingEnvironment>
<services>
<services>
<service name="WCFRest.Service1">
<endpoint address="" binding="webHttpBinding" contract="WCFRest.IService1" behaviorConfiguration="EdpHelpBehavior">
</endpoint>
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="EdpHelpBehavior">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
노란색으로 표기된 부분이 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>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheResponse" duration="60" varyByParam="format"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
[코드2 . 캐싱 적용을 위한 web.config 설정]
코드에 다음 어트리뷰트를 삽입합니다. 해당 코드에서는 캐쉬 시간을 60초로 설정하였습니다.
캐싱에 사용될 설정을 가져옵니다.
[그림4 .캐싱이 적용되지 않은 페이지 헤더]
캐싱이 적용되지 않은 페이지의 헤더 정보 입니다.
[그림5 .캐싱이 적용된 페이지 헤더]
캐싱이 적용된 후 헤더입니다. Cache-Control 에 max-age=60 값이 추가된 것을 확인할수 있습니다.
Summary
이상으로 WCF 4.0 에 추가된 기능들에 대해 간략하게 알아보았습니다. WCF 3.5 에 비해 진입장벽은 현저히 낮아졌으며 , 추가 기능들은 매우 강력합니다. 이전에 MS 측 관계자와 asmx 서비스를 더 이상 사용하지 않는 방안에 대해 살짝 논의한적이 있었습니다. (공식적인 입장은 아닙니다.) WCF 서비스는 더 이상 asmx 의 대체적인 성격이 아닌 , asmx 의 차세대 버전이라고 생각해도 좋을거 같습니다. 흥미로운 기능들이 많이 포함된 새로운 WCF를 한번 즐겨보시기 바랍니다 ^^
-fin
코드에 다음 어트리뷰트를 삽입합니다. 해당 코드에서는 캐쉬 시간을 60초로 설정하였습니다.
[OperationContract]
[WebGet]
[AspNetCacheProfile("CacheResponse")]
string GetData(int value);
[코드3 .WCF 코드에 Cache 설정] [WebGet]
[AspNetCacheProfile("CacheResponse")]
string GetData(int value);
캐싱에 사용될 설정을 가져옵니다.
[그림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