.NET Framework 4.0의 REST 지원
2. Http 캐시 사용하기
REST 서비스를 사용하면서 가장 큰 장점이라고 할 수 있는 것이 바로 HTTP 캐싱을 사용할 수 있다는 것이다. .NET Framework 4에서는 AspNetCacheProfile 어트리뷰트를 사용하여 아주 간단하게 REST 서비스를 캐시할 수 있습니다. AspNetCacheProfile 어트리뷰트는 ASP.NET output 캐시와 함께 동작하게 됩니다.
리스트 1. OutputCache 설정
<system.web>
<compilation debug="true" targetFramework="4.0" />
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="defaultCache" duration="60" varyByParam="postid" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
이전의 output 캐시 설정 방법 대로 postid라는 매개변수의 값에 따라 그리고 60초를 유지하도록 캐시를 설정합니다.
리스트 2. 어트리뷰트 추가
[AspNetCacheProfile("defaultCache")]
[OperationContract]
[WebGet(UriTemplate = "/GetPost/{postId}", ResponseFormat = WebMessageFormat.Json)]
Post GetPost(string postId);
캐시를 지정할 메서드에 AspNetCacheProfile 어트리뷰트를 추가하고 앞에서 만든 outputCacheProfile의 이름을 입력합니다. 이렇게 하면 GetPost를 호출 할 경우 postid에 대해 캐시가 만들어지며 60초 동안 그 값이 유지됩니다.
WCF REST 서비스에서 output Cache를 사용하기 위해서는 ASP.NET 호환성을 true로 설정해야 한다. 호환성을 설정 하는 방법은 serviceHostingEnviroment 엘리먼트를 추가하고 호환성을 설정하는 aspNetCompatibilityEnabled를 true로 설정 해야 합니다.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<system.serviceModel>
이렇게 한 다음 모든 것이 정상적으로 돌아가면 좋겠지만 다음과 같은 오류를 뱉어 낸다.
이 오류는 서비스가 ASP.NET 호환성을 지원하지 않기 때문에 활성화 될 수 없으니 호환성을 켜라~ 뭐 이런 이야기를 하고 있는데 말 그대로 WCF 서비스가 ASP.NET 호환 코드로 실행 되지 않기 때문에 발생하는 오류입니다. 다음 코드와 같이 서비스 클래스에 어트리뷰트를 추가하고 RequirementsMode 를 AspNetCompatibilityRequirementsMode.Allowed로 설정하면 ASP.NET호환 코드로 동작하게 됩니다. 기본 값은 NotAllowed입니다.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class PostService : IPostService
{
.
.
마지막으로 Fiddler를 통해 테스트를 해보면 헤더의 캐시 부분에 우리가 설정 한 대로 1분간 캐시 되는 것을 확인 할 수 있습니다.
다음 포스트에서는 조건부 요청, 예외처리, 다양한 메시지 포멧에 대해 다뤄 보도록 하겠습니다.
감사합니다.^^
'WCF' 카테고리의 다른 글
| .NET Framework 4.0의 REST 지원- HTTP Cahce 지원 (8) | 2010/01/08 |
|---|---|
| .NET Framework 4.0의 REST 지원 - Automatic Help Page Support (3) | 2010/01/08 |
| 이 컬렉션에는 스키마 http을(를) 가진 주소가 이미 있습니다. (3) | 2010/01/04 |


