답변:
ASP.NET/MVC와 WCF를 모두 활용하는 하나의 응용 프로그램을 작성하는 한 좋지 않습니다. WebAPI는 개선 된 문제 일지 모르지만 동일한 앱에서 WCF와 MVC를 사용하는 것으로 익숙한 한 프로젝트에서 동일한 개념을 나타내는 두 가지 모델 세트를 유지했습니다 .WCF 코드와 MVC 암호. 두 모델 사이에서 사물을 번역하기 위해 작성해야하는 모든 맵퍼를 상상할 수 있습니다. 피할 수 있거나 피해야 할 코드가 많이있었습니다.
이것이 발생한 이유 중 하나는 WCF 요청 및 응답 객체에 [DataContract]로 주석을 달고 속성에 [DataMember]로 주석을 달아야하고 MVC에서는이를 요구하지 않기 때문입니다. 한편 관용적 MVC는 WCF DataContracts와 다른 목표를 가진 ViewModel을 원할 것입니다. 물론 두 개의 전체 도메인 개체 집합을 사용하면 WCF 및 MVC 충돌보다 Conway의 법칙 과 더 관련이있을 수 있지만 WCF와 MVC는 출력 및 입력에 따라 목표와 요구 사항이 다릅니다.
개인적으로, 특히 여러 클라이언트를 원할 때 간단하지만 강력한 서비스 지향 백엔드 API를 개발하는 데 부분적으로 도움이됩니다. BackboneJS , KnockoutJS 등을 사용하여 응용 프로그램 코드를 작성 하면 개발 환경 이 향상되므로 우수한 JavaScript MVVM 및 micro-MVC 프레임 워크의 출현으로 자연스러운 선택이 될 것입니다. 그런 다음 선택한 마이크로 MVC에서 백엔드를 사용하여 웹 앱 또는 모바일 클라이언트를 구축 할 수 있으며 파트너는 동일한 API를 원격으로 사용할 수도 있습니다.
암시
WebAPI 또는 서비스 스택 이 백엔드 API를 빌드하기에 적합한 후보 일 수 있습니다. 지난 몇 개월 동안 서비스 스택을 사용해 왔으며 WCF를 대체 할 수있는 훌륭한 서비스 스택 인 것으로 확인되었습니다. 현재 내 블로그의 서비스 스택에 대한 자습서 시리즈를 작성 중 입니다.
그룹 유지 관리 서비스 스택은 프레임 워크를 사용하여 예제 응용 프로그램 을 게시하여 클론과 같은 StackOverflow를 개발했습니다.이 패턴은 특히 매력적이라고 생각하는 개발 패턴을 보여줍니다. 여기에는 MVC 웹 사이트, 모바일 앱 또는 다른 어떤 것이라도 쉽게 소비 할 수있는 간단한 모델 기반 서비스 백엔드가 포함됩니다. ServiceStack의 설계 목표는 클라이언트와 서버 사이의 연결을 줄여야하는 패턴을 분명히 장려합니다. GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
적은 수의 메소드를 선호하는 것과 같은 호출로 chatty API를 피하는 것이 좋습니다 . 다음과 같이 서비스 스택에서 동일한 것을 구현할 수 있습니다.
[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers
{
public int? RegionId { get; set; }
public string SearchTerm { get; set; }
}
public class CustomersService : Service
{
public object Get(Customers request) {
// handle request
return new CustomersResponse();
}
}
이점은, 내 눈에, 대신 많은 별도의 방법을 많이 이상에서 비즈니스 로직의 확산을 필요로한다는 것입니다 GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
, GetCustomersInRegion(int regionId)
, GetCustomersWithSearchTerm(string searchTerm)
, GetCustomers()
, 그것은 한 곳에서 전부입니다. 이것은 유지 보수가 쉬운 코드로 이어질 것입니다.
우연히도 Stack Exchange는 원래 서비스 스택 작성자를 고용했습니다 . 그는 서비스 스택 프로젝트에 계속 적극적으로 참여하고 있습니다.
특히 특정 메시지 큐를 좋아합니다. WCF는이를 허용하지만 WebAPI는 그렇지 않습니다. ServiceStack은 MQ를 통해 동일한 웹 서비스를 호출 할 수 있도록합니다. 이에 대한 자세한 내용은 Redis MQ 호스트 (github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis)를 참조하십시오.
@tzerb 는 IMO에 올바르게 답변했지만 해당 답변을 연장하고 싶었습니다. 현재 베타 단계에 있고 OSS 프로젝트 인 ASP.NET 웹 API는 가장 가까운 프레임 워크입니다.
제품에 대한 간단한 설명은 다음과 같습니다 ( ASP.NET 웹 API 페이지 에서 인용 ).
ASP.NET 웹 API는 브라우저 및 모바일 장치를 포함하여 광범위한 클라이언트에 도달하는 HTTP 서비스를 쉽게 구축 할 수있는 프레임 워크입니다. ASP.NET Web API는 .NET Framework에서 RESTful 응용 프로그램을 구축하기위한 이상적인 플랫폼입니다.
웹 API를 소비하는 데 사용할 수있는 클라이언트 응용 프로그램은 반드시 ASP.NET 응용 프로그램 일 필요는 없습니다. JavaScript를 사용하여 정적 HTML 페이지로 API를 사용할 수 있습니다. jQuery와 같은 유용한 JavaScript 라이브러리를 사용하면이 작업을 쉽게 수행 할 수 있습니다.
반면에 ASP.NET 응용 프로그램의 서버 사이트에서 API를 사용할 수 있습니다. 웹 API 프로젝트에는 HTTP 서비스를 쉽게 사용할 수있는 HttpClient라는 새로운 HTTP .NET 클라이언트 API도 도입되었습니다.
일반적으로 다음은 시작할 수있는 유용한 리소스입니다.
ASP.NET 웹 API 시작하기-자습서, 비디오, 샘플
이 프로젝트는 아직 베타 단계에 있습니다. Henrik F Nielsen 블로그 를 팔로우하여 최신 미공개 업데이트에 대한 정보를 프로젝트에 게시하는 것이 좋습니다 . 프로젝트의 소스 코드와 ASP.NET 웹 스택 프로젝트 의 개발 흐름을 확인할 수 있습니다 .
현재 지침은 REST를 위해 WCF 대신 MVC Web API를 사용하는 것입니다. http://stephenwalther.com/blog/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx
개발 모델은 매우 가까우며 때로는 불쾌한 WCF 구성을 무시합니다.