항상 느끼지만 세미나가 끝난 후에는 항상 아쉬움이 남습니다. 조금만 더 준비를 했더라면.. 조금만 더 침착 했더라면.. 해서, 이번 부터는 부족한 부분을 채우기 위해 아티클로 좀 더 정리를 해 보려고 합니다. 마음 같아서는 빨리 빨리 포스팅을 하고 싶긴 하지만.. 어쨌든 틈틈이 REST관련 아티클 들을 정리 하여 포스팅 하도록 하겠습니다.

오늘 세미나를 찾아주신 모든 분들과 Taeyo.NET의 모든 운영진들께 감사의 말씀을 전하고 싶습니다.

다음은 금일 세미나 데모와 PT자료입니다.

REST 아티클 목록
.NET Framework 4.0의 REST 지원- HTTP Cahce 지원
.NET Framework 4.0의 REST 지원 - Automatic Help Page Support

 

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun
2010/01/18 17:00

 

지난 주말 고객 사에서 문의를 하나 받게 되었습니다. 문제는 여러 개의 매개변수로 오버로드 된 메서드가 이상 작동을 한다는 것이었습니다. 문제는 Enum 타입의 매개변수에 상수 값 0이 입력되면 문제가 발생을 하는 것입니다.  

다음과 같이 enum이 정의 되어 있고 이 enum을 사용하는 메서드가 있습니다.  

 

public enum MyEnum
{
    A=0, B=1, C=2
}
public class MyClass
{
    public void DoWork(object p1)
    {
             Console.WriteLine("Object 매개변수:{0}", p1);
    } 
    public void DoWork(MyEnum p1)
    {
             Console.WriteLine("MyEnum 매개변수:{0}", p1);
    }
}


MyClass는 DoWork라는 두 개의 메서드를 가지고 있으며 매개변수를 통해 오버로드 되어 있습니다. 사용자는 첫 번째 메서드를 사용하여 int 형식의 값을 전달하고 그 결과를 받으려 했습니다.  


MyClass c = new MyClass();
c.DoWork(1);

 

먼저 상수 1을 매개변수로 전달 했습니다. 예상했던대로 첫번째 object를 매개변수로 받는 DoWrok 메서드가 실행 되었습니다.

 

 

문제는 다음 코드에서 발생하게 됩니다. 상수값 0을 입력해 보았습니다.

 

MyClass c = new MyClass();
c.DoWork(0);

  


 

예상과는 다르게 MyEnum 타입을 매개변수로 받는 DoWork 메서드가 실행 된 것입니다. 분명히 상수값 0을 입력하였으나 컴파일러는 0을 Enum 타입으로 인식하고 두번째 메서드를 실행하게 된 것입니다.  

이 문제는 그다지 많이 알려지진 않았지만 ADO.NET에서 SqlParameter를 생성할때도 발생 할 수 있습니다. SqlParameter에는 다음과 같은 오버로드가 존재 합니다.  

 

SqlParameter(string parameterName, object value)
SqlParameter(string parameterName, System.Data.SqlDbType dbType)

 

만약 첫번째 생성자를 사용할 목적으로 value에 상수값 0을 넣게 되면 0은 enum으로 인식하고 SqlDbType의 0번 값인 BigInt를 반환하게 되는 것입니다.  

제 개인적인 생각으로는 상당히 심각한 문제이나 Microsoft에서도 이미 알고 있고 하위 호환성 때문에 수정하지 않고 있다고 합니다.^^

다음 처럼 C# 명세에도 언급되어 있다는 것을 얼마 전에 알게 되었습니다. 


 


 

이를 해결하기 위해서는 외부 변수에 0을 할당하여 사용을 하거나 오버로드시 메서드의 개수를 달리 하는 방법으로 해결 할 수 있습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License

'.NET' 카테고리의 다른 글

Enum Type의 버그?  (2) 2010/01/18
.NET Framework 라이브러리 소스 코드 공개  (0) 2008/01/17
Posted by kyeongkyun(kobukii) kyeongkyun
TAG .NET, enum
올해에도 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와 관련된 부분에 대하여 알아보도록 한다. 참석하실 분들은 다음 링크로 이동 하셔서 자신의 이름(혹은 아이디)를 기입해주시기 바랍니다.
 
세미나 신청하기
저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun

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

 

 

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

감사합니다.^^

이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun

.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 지원에 대해 살펴 볼까 합니다.  다음 포스트에서 뵐께요~^^

이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun

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

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

 

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

 

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

 

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

 

 

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun
TAG IIS, WCF

동생들과의 나들이.. 나이먹고 뭐하는 짓인지. 하지만 즐거웠어^^

주동자 양갱과 행동대원 원주 누님에게 감사~

.

얘네들이 낼모래면 서른이다.

.

무서워도 잘 타네 이언니들도..

.

춥긴 좀 추웠어..

.

동생들 보기 좋아~ 즐거워 보여.. 난? 난?

.

ㅋㅋ 울 사이트 여성회원 세명이나.. 세명이 다야 다야

.

역시 Winner는 사진 빨을 잘 받어

.

그치?

.

울 사이트에서 젤 이쁜 양갱

.

뽀나스 .. 아래는 무시무시한 맹수들...

이제 집에 가자..

.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun

GAC에 등록된 어셈블리를 Visual Studio 의 .NET 탭에 표시하기 위해서는 레지스트리 키를 추가 할 필요가 있습니
다.키는 다음과 같습니다.

1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolder\MyDll]
2. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<version>\AssemblyFolderEX\MyDll]


<version>부분은 닷넷의 버전으로 대체 됩니다.(1.1, 2.0, 3.0, 3.5, 4.0...)
각 키에 대응하는 값은 어셈블리가 위치한 물리적 경로(ex c:\testproj\bin)가 됩니다.

최근에 직접 개발한 어셈블리를 .NET 탭에 적용 할 일이 있었습니다. 작업 중 1번 키와 2번 키의 차이점이 있다는 것을 알게 되었습니다.
1번 레지스트리 키는 모든 Visual Studio에서 동작을 한다고 생각 했지만 아직 베타버전이긴 하나 Visual Studio 2010에서는 정상동작을 하지 않았습니다. 아마도 .NET Framework 버전과 관계가 있지 않나 하는 생각이 듭니다.
해서 2번 레지스트리 키를 사용하여 version부분이 4.0인 키에 추가를 하니 정상적으로 닷넷 탭에 추가 되었습니다. 성공 하였습니다.

Visual Studio 2010이 아니라면 대부분의 경우 1번 키로 설정 하면 문제없이 .NET 탭에 GAC에 등록된 어셈블리가
표시 될 것입니다.

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun


10주간의 프로젝트가 마무리 되었습니다. 힘들기도 했지만 잘 마무리 되었고 QD 자격도 받게 되어 많이 기쁘네요^^
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun
아마존에서 1위를 하고 있는 MVC Framework 번역서가 드디어 출간 되었습니다. 뭐 태오님이 번역 하셨으니 말이 필요 없죠^^
원문의 링크로 가시면 세계적인 ASP.NET 초 고수들의 멋들어진 서평을 확인 할 수 있어요~
저는 예판으로 이미 주문 해 두어 늦어도 모레면 받아 볼 수 있겠네요~ 완전 기대됩니다.

아래는 태오사이트 원문입니다.^^
태오입니다.

현재 출간된 ASP.NET MVC 서적 중에서 가장 호평을 받고 있는 서적인 
Aprees의 pro ASP.NET MVC Framework (스티브 샌더슨 저)의 번역작업이 끝났습니다.

아시는 분은 아시겠지만, 이 책은 아마존(Amazon)의 programming/asp.net 분야에서 출간 당시부터 
베스트셀러에 속하여 현재까지 당당히 1위를 차지하고 있는 도서이기도 합니다.

 http://www.amazon.com/gp/bestsellers/books/379360011/ref=pd_zg_hrsr_b_1_5_last

원래는 번역할 계획이 없었으나, 원서 자체가 너무 좋아서 꼬심에 넘어가 버렸습니다.

이 책은 IIS 시삽인 송원석 군과 같이 작업을 했는데요.
어려운 내용이 다소 있긴 했지만, 그런대로 재미있는 작업이었습니다.
다소 오랜만에 하는 번역이라 약간 움찔하기도 했습니다만, 그런대로 잘 된 것 같습니다.

국내에 출간되는 서적의 표지는 다음과 같이 상큼(?)하게 바뀌어서 출간되었습니다



공동구매는 따로 진행하지 않는다고 합니다. (아쉽게도)
대신에, 사전 예약판매를 실시한다고 합니다.
사전예약 구매를 하시면 10% 할인과 10% 포인트 적립이 되는 모양입니다.

책의 분량은 원서에 비해 100페이지 정도 늘어난(번역서가 일반적으로 그렇긴 합니다만)
700 페이지 가량의 서적이 될 것이라고 합니다.
대부분의 온라인 서점에서 구매가 가능하지만, 일단 yes24와 강컴의 링크는 다음과 같습니다.

yes24 : http://www.yes24.com/24/goods/3544668
강컴 : http://kangcom.com/sub/view.asp?sku=200909240003

혹시라도 ASP.NET MVC 에 관심이 있는 분들이라면, 그래서 도서를 구매할 의향이 있으시다면
사전 예약 판매를 통해서 구매하시는 편이 그나마 조금이라도 싸게 구입할 수 있는 방법 같습니다.

감사합니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by kyeongkyun(kobukii) kyeongkyun
이전버튼 1 2 3 4 5 이전버튼