블로그 이미지
kyeongkyun

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    

Notice

2010/01/12 18:13 세미나
올해에도 Taeyo.net 신년 세미나에서 발표를 하게 되었습니다. 블로그에 포스팅 한 그리고 포스팅 할 REST관련된 포스트를 기반으로 세미나를 진행 하려고 합니다. 열심히 준비 하고 있으니 많이 참석 하셔서 좋은 정보 얻어 가셨으면 좋겠습니다. 아래는 자세한 세미나 정보 입니다.^^
날짜 : 2010년 1월 30일 토요일 오후 2시 장소 : 선릉역 근처 포스코빌딩 서관 5층 마이크로소프트 세미나 룸 지도 :

세션 시간 : 오후 2시부터 6시까지 세션 개요 : 2:00 - 2: 50 ASP.NET 4.0 New Features ? Part 1 3:00 - 3: 50 ASP.NET 4.0 New Features - Part2 : URLRouting 4:00 - 4: 50 ASP.NET Web Service와 jQuery Ajax 유형별 소개 및 Pager 플러그인으로 방명록 만들기 5:00 - 5: 50 WCF를 사용한 REST 서비스 구현
구체적인 내용은 다음과 같습니다.
세션 1 시간 : 14:00 - 14:50 (50분) 발표자 : 최지훈 MVP (드원테크놀로지 컨설턴트) 제목 : ASP.NET 4.0 New Features ? Part 1 설명 : .NET Framework 4.0 Beta의 공개와 함께 ASP.NET 4.0에서도 많은 흥미로운 변화가 생겼습니다. ASP.NET 4.0에서 새롭게 등장한 기능 및 이전의 ASP.NET과 비교하여 달라진 기능들을 이해함으로써, 보다 효과적으로 ASP.NET 4.0을 사용하는 방법을 알아보는 시간을 갖습니다.
세션 2 시간 : 15:00 - 15:50 (50분) 발표자 : 한상훈 MVP (한빛소프트) 제목 : ASP.NET 4.0 New Features - Part2 : URLRouting 설명 : 알기 쉬운 URL에 대한 정의와 어떠한 장점을 가지고 있는지에 대해 알아보고, ASP.NET WebForms 환경에서의 URL Routing에 대한 전반적인 소개 및 구현을 해보도록 한다.
세션 3 시간 : 16:00 - 16:50 (50분) 발표자 : 박용준 MVP (프리랜서, 전문강사 ) 제목 : ASP.NET Web Service와 jQuery Ajax 유형별 소개 및 Taeyo jQuery Pager 플러그인으로 방명록 만들기 설명 : jQuery Ajax 기능을 사용하여 ASP.NET Web Service에서 반환되는 여러가지 데이터 형식을 처리하는 유형을 정리하여 설명한 후 이를 적용한 간단한 웹 응용 프로그램을 만들어 본다.
세부 내용 : - ASP.NET + jQuery Ajax + JSON : 단일값 반환 - ASP.NET + jQuery Ajax + JSON : Object(개체값) 반환 - ASP.NET + jQuery Ajax + JSON : DateTime(날짜값) 반환 - ASP.NET + jQuery Ajax + JSON : List값 반환 - 페이징 처리시 Taeyo jQuery Pager 플러그인 적용
세션 4 시간 : 15:00 - 15:50 (50분) 발표자 : 김경균 MVP (드원테크놀로지 컨설턴트) 제목: WCF를 사용한 REST 서비스 구현 설명 : SOAP기반의 웹 서비스에 비해 가볍고 구현이 쉬운 REST에 대해 알아보고 WCF를 통해 REST 서비스를 구현해 보도록 한다. 그리고 .NET Framework 4에서 추가된 WCF의 새로운 기능 중 REST와 관련된 부분에 대하여 알아보도록 한다. 참석하실 분들은 다음 링크로 이동 하셔서 자신의 이름(혹은 아이디)를 기입해주시기 바랍니다.
 
세미나 신청하기
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by kyeongkyun(kobukii) kyeongkyun
2010/01/08 18:07 WCF

.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분간 캐시 되는 것을 확인 할 수 있습니다.

 

 

다음 포스트에서는 조건부 요청, 예외처리, 다양한 메시지 포멧에 대해 다뤄 보도록 하겠습니다.

감사합니다.^^

크리에이티브 커먼즈 라이선스
Creative Commons License
posted by kyeongkyun(kobukii) kyeongkyun
2010/01/08 14:27 WCF

.NET Framework 4.0 REST 지원

 

.NET Framework 4에서는 WCF를 통해 RESTful 서비스를 개발 할 때 도움을 줄 수 있는 몇 가지 기능이 추가 되었습니다.  첫 번째로 개발한 RESTful 서비스에 대해 서비스를 사용하는 사람이 제공되는 서비스를 보다 쉽게 이해할 수 있도록 하기 위해 도움말 페이지를 자동으로 만들어 줍니다. 두 번째는 동일한 요청에 대해 보다 좋은 성능을 낼 수 있도록 선언적으로 구성할 수 있는 HTTP 캐싱을 지원합니다. 마지막으로 몇 가지 중요한 기능이 추가 되었습니다. 조건에 다라 GET/PUT 요청을 수행할 수 있는 기능이 추가 되었고 WebFaultException을 제공하여 예전에는 지원되지 않았던 REST 클라언트에게 오류 메시지를 반환 할 수 있게 되었습니다. 마지막으로 REST 서비스에 다양한 메시지 포맷으로 컨텐츠를 반환 할 수 있게 되었습니다. 예전에는 JSON과 XML만을 제공 하였으나 ATOM, Text, Binary등을 지원하게 되었습니다.  

지금부터 하나씩 살펴 보도록 하겠습니다.

도움말 페이지 사용하기

WCF 웹프로그래밍 모델로 구현된 RESTful 서비스는 HTTP GET이나 HTTP POST와 같은 HTTP 기본동사를 사용하기 때문에 별도의 WSDL을 제공하지 않습니다. 그렇기 때문에 일반적인 ASP.NET 웹 서비스나 WCF 서비스에서처럼 "웹 참조" 혹은 "서비스 참조"를 사용할 수 없습니다. 만약 서비스에 대한 정확한 스팩을 별도로 제공하지 않는다면 RESTful 서비스를 사용하는 사용자 입장에서는 어떠한 정보도 알 방법이 없다는 단점이 있습니다. 이러한 점을 해결하기 위해 .NET Framework4 에서는 간단한 설정을 통해 도움말 페이지를 제공할 수 있는 기능이 추가 되었습니다.

이미 개발 해 놓은 웹프로그래밍 모델로 구현된 서비스에 도움말 페이지를 사용할 수 있도록 하기 위해서는 끝점의 동작에 대한 정보를 설정하는 endPointBehavior를 추가합니다. 그런 다음 새로운 behavior를 추가하고 자식 엘리먼트로 webHttp 엘리먼트를 추가한 후 helpEnabled 어트리뷰트를 true로 설정하면 도움말 페이지를 볼 수 있습니다.

 

리스트 1. Help Page 표시를 위한 Configuration 설정 

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior>
        <webHttp helpEnabled="true" />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <services>
    <service name="Blog.Web.PostService">
      <endpoint
          binding="webHttpBinding"
          address=""
          contract="Blog.Web.IPostService" />
    </service> 
  </services>
</system.serviceModel>

 

설정을 완료 한 후 해당 svc파일을 미리 보기 하면 [그림1]과 같은 초기 화면을 볼 수 있습니다. Help설정을 하기 전에는 이 화면에 끝점을 찾을 수 없다는 메시지만 출력 되었으나 Help설정 후에는 친절하게도 유효한 요청을 생성할 수 있는 서비스 도움말 페이지를 제공한다고 표시됩니다.

페이지의 service help page 라는 링크를 클릭하거나 Url의 가장 뒤에 /help를 입력함으로써 도움말 페이지로 이동 할 수 있습니다.

 


그림 1. 서비스 시작 페이지

 

도움말 페이지는 svc 파일 즉, 현재 서비스에서 노출 하고 있는 서비스의 목록을 보여줍니다. 목록은 UriTemplate를 통해 이름 지어진 Uri, 표준 HTTP 동사, 그리고 간단한 설명이 표시됩니다. 각 HTTP 동사에 링크가 걸려있고 이를 클릭하면 보다 자세한 정보를 제공합니다.

 


그림 2. 도움말 목록 페이지

 

SetPost에 대한 자세한 도움말을 요청 형식(XML 또는 Json)에 따라 Body를 구성할 수 있는 예제가 주어 집니다. 또한 XML은 관련 스키마를 제공해 주기도 합니다.

예를 들어 HTTP Method가 POST이고 Body를 [그림 3] 의 XML또는 Json Body 처럼 구성하면 새로운 포스트를 작성 할 수 있게 되는 것입니다. 그리고 이 메서드는 아무것도 반환하지 않으므로 응답은 Response Body가 비어 있다는 설명과 함께 N/A로 나타나게 됩니다.

 


그림 3. 상세 도움말 페이지

 각 도움말 페이지는 서비스당 즉 .svc당 하나씩 만들어지게 되며 OperationContract특성이 붙어있는 모든 서비스 메서드가 노출 됩니다.

다음 포스트는 HTTP Caching 지원에 대해 살펴 볼까 합니다.  다음 포스트에서 뵐께요~^^

크리에이티브 커먼즈 라이선스
Creative Commons License
posted by kyeongkyun(kobukii) kyeongkyun
2010/01/04 17:48 WCF

문제는 IIS상의 웹사이트에 대해 스키마가 중복되었을 경우 있습니다.

웹사이트의 바인딩 설정을 확인 하여 중복된 바인딩을 제거하므로써 이 문제를 해결 할 수 있습니다.

 

해결 방법은 다음과 같습니다.

 

IIS의 웹사이트에서 바인딩 편집을 선택하여 사이트 바인딩 편집 창을 띄운다음

 

사이트 바인딩 편집 화면을 보면 http 스키마를 사용하는 바인딩이 2개인 것을 확인 할 수 있습니다.
여기서 마지막에 있는 바인딩을 제거하게 되면 위 오류를 해결 할 수 있습니다.

 

 

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by kyeongkyun(kobukii) kyeongkyun
TAG IIS, WCF
prev 1 next