2010-02-15 4 views
7

목표는 jQuery와 표준 기반 웹 프론트 엔드, 모바일 장치 "팻 클라이언트 (fat-clients)"및 WPF 데스크톱 응용 프로그램을 통해 소비 할 서비스를 작성하는 것입니다..NET에서 새로운 RESTful 웹 서비스 개발 - 어디서 시작해야할까요? ASP.NET MVC, WCF?

WCF는 좋은 옵션이 될 것 같지만 WCF로 RESTful 서비스를 만든 적이 결코 없으므로 그 접근법을 어디에서 시작해야할지 모르겠습니다.

다른 옵션은 ASP.NET MVC를 사용하고, 사용자 지정 경로를 추가하고, 몇 가지 컨트롤러 동작을 추가하고, JSON, XML 및 기타 반환 유형을 푸시하기 위해 다양한보기를 사용하는 것입니다.

이 프로젝트의 대부분은 나 자신을위한 학습으로, 시간을 좀 보내고 "맞다"하고 싶습니다. 그래서 조각들이 어떻게 어울리는 지 더 잘 이해할 수 있습니다.

내 RESTful 서비스를 구축하는 데 사용해야하는 방법은 무엇인가요? 그런 식으로하는 것이 몇 가지 장점이 있습니까?

답변

8

일반적으로 모든 종류의 호스팅 된 serice에 대해 WCF가 사용되지만 JSON을 직렬화 메커니즘으로 사용하는 RESTful 서비스의 경우에는 ASP.NET MVC를 선호합니다. 이 답변의 나머지 부분).

첫 번째 이유 중 하나는 라우팅 메커니즘 때문입니다. WCF에서는 계약에 정의해야합니다. 모두 훌륭하지만 좋은 방법이지만, 라우팅에 대한 빠른 변경이 필요한 경우 ASP의 라우팅 메커니즘을 사용하여 라우팅하는 것이 훨씬 쉽습니다. 그물.

위의 점까지 WCF의 여러 인터페이스에 여러 서비스가 노출되어있는 경우 URL 구조의 전체 이미지를 얻는 것이 어렵지만 ASP.NET에서는 (일반적으로) 모든 경로 지정이 한 곳에서 이루어집니다.

ASP.NET에 대한 두 번째 사항은 ASP.NET이 알려진 (요청, 응답, 서버 등) 모든 내장 개체에 액세스 할 수 있다는 것입니다.이 개체는 HTTP 특정 엔드 포인트 (작성중인 것). WCF에서 이러한 동일한 기능을 많이 사용할 수는 있지만 WCF에 그렇게하고 있다고 구체적으로 말한 다음이를 염두에두고 서비스를 설계해야합니다.

마지막으로, 개인적인 경험을 통해, 나는 DataContractJsonSerializer가 너무 잘 DateTimeOffset 값을 처리하지 않는 것으로 나타났습니다, 그것은 (엔드 포인트 이상) 서비스와 함께 작업 할 때 어떤 될 수 DateTime 이상 사용해야하는 유형입니다 여러 시간대에 걸쳐 사람들이 호출했습니다. ASP.NET에는 사용할 수있는 다른 serializer가 있습니다. 또는 원하는 경우 사용자 지정 serializer를 사용하는 ActionResult을 직접 만들 수도 있습니다. 나는 개인적으로 JSON.Net serializer을 선호합니다.

내가 좋아하는 JSON.Net 시리얼 라이저와 ASP.NET에 대한 좋은 점 중 하나는 똑똑한 경우 익명 유형을 사용할 수 있다는 것입니다. 비 제네릭 형식에 정적 제네릭 메서드를 만든 다음 내부 제네릭 형식을 위임하면 형식 유추를 사용하여 직렬화 된 반환 값에 익명 형식을 쉽게 사용할 수 있습니다 (물론 일회용이라고 가정 할 때 일관되게 반환되는 구조를 가지고 있어야하며이를 정의하고 사용해야합니다.)

RESTful 서비스를 개발하는 경우 WCF를 완전히 할인 할 필요가 없다는 점도 언급해야합니다. 서비스에서 ATOM 또는 RSS 피드를 푸시하는 경우 대용량System.ServiceModel.Syndication 네임 스페이스의 클래스가 해당 피드의 구성 및 직렬화에 도움이됩니다.ActionResult 클래스의 간단한 하위 클래스를 만들어 SyndicationFeed의 인스턴스를 가져온 다음 ActionResult이 실행될 때이를 출력 스트림에 직렬화하는 것은 매우 간단합니다.

+1

내가 원래 질문의 무관 실현, 그러나 DateTimeOffset과 JSON 직렬화에서 보았던 문제점에 대해 자세히 설명해 줄 수 있습니까? – Nate

+0

@ 네이트 : 별도의 질문으로 권하고 싶습니다. 자신이 보는 차이점을 테스트 한 다음, 차이점에 대해 질문을 게시하십시오. – casperOne

1

저는 개인적으로 WCF에서 REST 서비스를 구현하는 데 열중하지 않습니다. asp.net mvc 프레임 워크를 더 자연스러운 프로그래밍 모델을 찾으십시오.

http://atomsite.net/의 구현자는 원래 WCF에서 atompub 사양을 구현 한 다음 asp.net mvc를 사용하여 전체 서비스를 다시 작성했습니다. 그의 경험은 순수한 REST 서비스 asp.net mvc가 갈 길이라는 나의 의견을 상기시켰다.

유일한 예외는 잠재적으로 서비스를 평온하고 안심할 수있는 방법으로 공개하려는 경우입니다. 또는 REST를 통해 기존 WCF 서비스를 노출하는 경우

4

ASP.NET MVC와 WCF간에 결정을 내리는 데 도움이되는 생각입니다. 설명하는 시나리오에서 HTTP 이외의 프로토콜을 사용해야 할 것으로 예상됩니까?

WCF는 전송 프로토콜에 무관하게 설계되어 있으므로 ASP.NET과 매우 다릅니다. 채널 및 바인딩, 메시지, 서비스 계약, 데이터 계약 및 동작이 있습니다. 분산 응용 프로그램을 빌드 할 때 지침을 거의 제공하지 않습니다. 그것이 당신에게주는 것은 깨끗한 슬레이트입니다.

ASP.Net MVC는 자연스럽게 Http 기반 프레임 워크입니다. HTTP 동사, 미디어 유형, URL, 응답 헤더 및 요청 헤더를 처리합니다.

질문은 당신이 만들고자하는 모델에 더 가까운 모델입니까?

이제 ReST에 대해 언급했습니다. ReST 제약 조건에 따라 분산 응용 프로그램을 실제로 빌드하려면 OpenRasta를 사용하는 것이 좋습니다. 그것은 당신을 그 길로 안내 할 것입니다.

당신은 ASP.Net MVC에서 휴식을 할 수있는 당신이 WCF에서 그것을 할 수 있지만, 그 솔루션, 당신은 성공의 구덩이에 빠지지 않을 것이다 ;-)

+0

나는 OpenRasta에 대해 들어 본 적이 없다 - 그것에 대한 추가 정보가 있습니까? 또한 다양한 플랫폼에서 "클라이언트"를 개발할 것이기 때문에 HTTP 및/또는 HTTPS 만 사용됩니다. – Nate

+0

여기에 주요 프로젝트가 있습니다. http://trac.caffeine-it.com/openrasta/ serialseb는 프로젝트의 리드 개발자이며 여기에 자주 기고합니다. Mix10을 체크 아웃하면 OpenRasta에 관한 이야기가 REST 카테고리의 유일한 것입니다. http://live.visitmix.com/Sessions#/tags/REST –

+0

realitivly simple 프로젝트의 경우 openrasta가 과장 될 것인가 asp와 같은 것입니까? .net mvc? 저는 이미 asp.net MVC와 WCF 모두에서 꽤 괜찮은 편입니다. 그리고 지금 완전히 새로운 프레임 워크/툴킷을 배우는 것이 나에게 유익한 지 확신 할 수 없습니다. 생각? – Nate