WCF 대 ASP.NET 웹 API [닫기]


484

몇 달 동안 WCF의 기본 개념을 파악하려고 노력했으며 최근에 첫 번째 WCF 서비스 응용 프로그램을 개발했습니다.

구성 파일의 모든 설정을 이해하기 위해 많은 노력을 기울였습니다.
나는 환경에 대해 확신하지 못하지만 놀라운 일을 할 수있는 것처럼 보입니다.

다른 날에는 Microsoft가 ASP.NET Web API 라는 새로운 것을 발견했습니다 .

내가 읽을 수있는 것은 RESTful 프레임 워크 이며 사용 및 구현이 매우 쉽습니다.

이제 두 프레임 워크의 주요 차이점과 이전 API를 사용하여 이전 WCF 서비스 응용 프로그램을 변환 해야하는지 여부를 파악하려고 합니다.

누군가가 각각의 차이점과 사용법을 이해하도록 도와 줄 수 있습니까?


12
흥미로운 질문 +1 아마 당신은 programmers.stackexchange.com
Mithir

1
"이전"WCF의 어떤 기능을 사용하고 있습니까? RESTful API를 작성하려고합니까? 아니면 RPC 또는 SOAP?
marcind 2014

1
@marcind : 답변 주셔서 감사합니다. 주로 RESTful 호출입니다. RPC가 전혀 없습니다.
LeftyX 2014

4
또 다른 좋은 대답은 stackoverflow.com/a/9859981/456814

1
둘 다 똑같은 것이지만 wcf는 기본적으로 인트라넷을위한 것이고 Webapi는 인터넷을위한 것입니다. 물론 wcf도 편안하게 만들 수 있습니다! 기본적으로 둘 다 http 프로토콜 웹에서 실행되었습니다. http
LostCoder

답변:


185

새로운 ASP.NET 웹 API 는 이전 WCF 웹 API 프로젝트 의 연속입니다 (일부 개념이 변경 되었지만 ).

WCF는 원래 SOAP 기반 서비스를 활성화하기 위해 만들어졌습니다. 더 간단한 RESTful 또는 RPCish 서비스 (jQuery와 같은 클라이언트 생각)의 경우 ASP.NET 웹 API를 선택하는 것이 좋습니다.


36
또한 WCF는 REST 스타일 서비스 작성을 지원하지만 ASP.NET 웹 API의 REST 지원은 더욱 완벽하며 향후 모든 REST 기능 개선은 ASP.NET 웹 API에서 제공됩니다. msdn.microsoft.com/en- us / library / jj823172.aspx
Ohad Schneider

6
실제로 WCF는 원래 SOAP 또는 RPC 서비스와 클라이언트간에 추상화 계층을 구현하기 위해 만들어졌습니다. 요점은 이러한 매우 다른 호출을 중심으로 단일 아키텍처 (ABC)를 만들고 구성 파일을 통한 배관 처리를 처리하는 것이 었습니다.
Scott Marcus

4
ASP.NET 웹 API의 실제 단점은 클라이언트 툴링입니다. Visual Studio는 완벽한 WCF 서비스 클라이언트 엔터티 및 서비스 생성을 지원하는 통합 도구를 지원합니다. 웹 API에서 지원되지 않습니다. 나는이 알고 HttpClient굉장하다,하지만 개체 생성 및 직렬화 / 역 직렬화를 처리하지 않습니다.
Shimmy Weitzhandler가

1
@Shimmy swagger를 사용한 서비스 생성은 어떻습니까?
Alex78191

1
귀하의 답변에 감사드립니다. 생성 된 엔티티가 INotifyPropertyChanged클라이언트 엔티티를 생성 할 수 있습니까 ? 검증은 어떻습니까?
Shimmy Weitzhandler

250

우리에게는 WCF가 REST 및 SOAP 용 웹 API에 사용됩니다. Web API가 SOAP를 지원하기를 바랍니다. WCF의 고급 기능을 사용하지 않습니다. MSDN 과 비교 한 내용은 다음과 같습니다 .

여기에 이미지 설명을 입력하십시오


1
그리고 Web API는 CSOM에 대한 Godsend 인 OData 를 지원합니다 .
abbaf33f

12
MS가 그렇게 많은 것을 말하는 것이 정말 놀라운 일이 아닙니다. 예를 들어 WCF는 JSON을 지원하지만이 정보는이 "비교"에 잘 숨겨져 있지만 WebApi는 JSON을 한 번만 두 번 지원한다고 텍스트로 말합니다.
magallanes

1
이 테이블은 의미가 없습니다. "JQuery"(자본 J에 대한 따옴표)는 프로토콜 및 / 또는 형식입니까?
hyankov

1
흥미 롭군 MSDN은 HTTP를 전송 프로토콜로 언급하는 데 잘못되었습니다. HTTP는 응용 프로그램 계층 프로토콜입니다.
RayLoveless

80

ASP.net 웹 API는 HTTP 및 REST 기반 GET, POST, PUT, DELETE에 관한 것으로 ASP.net MVC 스타일의 프로그래밍 및 JSON 리턴 가능을 잘 알고 있습니다. 웹 API는 모든 가벼운 프로세스와 순수한 HTTP 기반 구성 요소를위한 것입니다. 단순하거나 간단한 단일 웹 서비스를 위해 WCF를 진행하려면 모든 추가 수하물을 가져옵니다. Ajax 또는 동적 호출을위한 경량의 간단한 서비스를 위해 WebApi는 항상 필요를 해결합니다. 이것은 ASP.net MVC를 깔끔하게 보완하거나 병렬로 도와줍니다.

팟 캐스트를 확인하십시오 . Hanselminutes Podcast 264-이것은 아버지의 WCF가 아닙니다 . 자세한 내용은 Scott Hanselman의 Glenn Block이있는 WebAPI에 관한 모든 것 입니다.


67

아래에 나열된 시나리오에서 WCF로 이동해야합니다.

  1. TCP, MSMQ 또는 MIME과 같은 프로토콜로 데이터를 보내야하는 경우
  2. 소비하는 클라이언트가 SOAP 메시지를 소비하는 방법을 알고 있다면

WEB API는 RESTful / HTTP 서비스 개발을위한 프레임 워크입니다.

브라우저, HTML5와 같은 SOAP를 이해하지 못하는 클라이언트가 너무 많기 때문에 WEB API가 좋은 선택입니다.

HTTP 서비스 헤더는 서비스 보안 방법, 정보 캐시 방법, 메시지 본문 유형 및 HTTP 본문은 XML뿐만 아니라 HTML과 같은 모든 유형의 컨텐츠를 SOAP 서비스로 지정할 수 있습니다.


7
이것은 WCF가 SOAP 메시지 만 처리한다고 가정합니다. 잘못된 가정입니다. WCF 서비스에서도 REST 엔드 포인트를 노출 할 수 있습니다. WCF의 기능을 사용하지 않을 경우 (tridy의 메시지 참조) Web API가 적합합니다.
Mike

3
W WCF도 마찬가지입니다. 기본적으로 웹 API는 간단한 CRUD 스타일 데이터 앱을 수행하는 경우 적합한 WCF 기능의 하위 세트입니다.
user1496062

41

지금까지 두 가지를 모두 사용했기 때문에 WCF와 Web API의 많은 차이점을 발견했습니다. 두 기술 스택은 서로 다른 시나리오에 적합하므로 어떤 것이 더 낫다고 말할 수는 없으며 구성 및 시나리오에 따라 다릅니다.

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

참고 : 데이터는 내 견해 일뿐 만 아니라 다른 공식 웹 사이트에서도 수집됩니다.


12
웹 서비스 API는 Windows 서비스뿐만 아니라 자체 호스팅 (Owin / Katana)도 가능합니다
Monis Iqbal

HTML 대신 이미지를 사용하여 테이블을 작성하는 경우 빼기 1-개선을위한 답변 편집을 방해하기 때문입니다.
Ahsan Ahmed

34

WCF는 당신에게 많은 것을 제공 할 것입니다. 아무것도 비교할 수 없습니다. 인증, 권한 부여, 암호화, 큐잉, 제한, 안정적인 메시징, 로깅, 세션 등의 자체 구현을 수행하지 않으려는 경우. WCF는 [단순한] 웹 서비스가 아닙니다. WCF는 SOA를위한 개발 플랫폼입니다.


11
내가 실수하지 않으면 WEB API도 나열된 대부분의 기능을 제공한다고 생각합니다.
Alex

4
웹 API는 이러한 것들을 제공하지 않거나 매우 간단한 버전을 제공하지 않습니다.
user1496062

3
글쎄요, 무엇을 제공합니까?

5
인증 및 권한 부여에 대해서는 asp.net/web-api/overview/security/…를 확인 하십시오 . tl; dr : IIS에서 확실히 지원합니다. 암호화를 위해서는 아마도 SSL을 사용해야 할 것입니다. ASP.NET은 자연스럽게 큐잉을 처리합니다. 세션이 존재하지만 세션을 직접 사용하지 않는 것이 좋습니다. 로깅은 ActionFilter 등을 통해 쉽게 설정할 수 있습니다. 안정적인 메시징의 대안은 SignalR을 사용하는 것입니다 (정확하지는 않지만).
James Haug

7
"아무것도 비교할 수 없습니다"?? 있을 것 같지 않게.
bbsimonbb

16

왜 대답하고 있습니까?

이 두 기술의 차이점을 이해하는 데 많은 시간이 걸렸습니다. "이 답변을 찾기 위해 궁금한 시점에이 포인트가 있다면 필요한 기술을 선택하기로 결정했습니다."라고 생각합니다.

정보 출처 :

Microsoft® Visual Studio® 2015 Unleashed

ISBN-13 : 978-0-672-33736-9 ISBN-10 : 0-672-33736-3

ASP.NET 웹 API 및 WCF가 필요한 이유 :

ASP.NET 웹 API와 WCF의 기술을 비교하기 전에 웹 서비스를 작성하는 데 실제로 REST (Representational State Transfer)와 SOAP / WSDL의 두 가지 스타일 / 표준이 있음을 이해해야합니다. SOAP / WSDL은 웹 서비스가 구축 된 원래 표준이었습니다. 그러나 사용하기가 어려웠으며 XML과 같은 부피가 큰 메시지 형식으로 인해 성능이 저하되었습니다. REST 기반 서비스는 빠르게 대안이되었습니다. HTTP의 기본 구성 (GET, POST, PUT, DELETE)을 활용하고 일반적으로 JSON과 같은 더 작은 메시지 형식을 사용하기 때문에 작성하기가 더 쉽습니다. 결과적으로 REST 기반 HTTP 서비스는 이제 웹을 엄격하게 대상으로하는 서비스 작성 표준이되었습니다.

ASP.NET 웹 API의 목적을 정의하자

ASP.NET Web API는 REST 기반 HTTP 웹 서비스 개발을위한 Microsoft의 기술입니다. (오래 전에는 SOAP / WSDL을 기반으로하는 Microsoft의 ASMX를 대체했습니다.) 웹 API를 사용하면 모든 브라우저와 기본 장치가 이해하는 HTTP 프로토콜을 기반으로 강력한 서비스를 쉽게 작성할 수 있습니다. 이를 통해 응용 프로그램을 지원하는 서비스를 만들고 다른 웹 응용 프로그램, 태블릿, 휴대 전화, PC 및 게임 콘솔에서 서비스를 호출 할 수 있습니다. 현재 웹 연결을 활용하기 위해 오늘날 작성된 대부분의 응용 프로그램은 어떤 방식 으로든 HTTP 서비스를 사용합니다.

이제 WCF의 목적을 정의 해 봅시다 :

인터넷을 통한 통신이 항상 가장 효율적인 방법은 아닙니다. 예를 들어, 클라이언트와 서비스가 모두 동일한 기술 (또는 동일한 시스템)에 존재하는 경우보다 효율적인 통신 수단 (예 : TCP / IP)을 협상 할 수 있습니다. 서비스 개발자는 피하려고했던 것과 동일한 선택을합니다. 그들은 이제 효율적인 내부 서비스를 만들고 인터넷을 통해 광범위한 액세스를 할 수 있도록 선택해야했습니다. 그리고 두 가지를 모두 지원해야하는 경우 여러 버전의 서비스를 만들거나 서비스에 액세스하기 위해 별도의 프록시를 만들어야 할 수도 있습니다. 이것이 Microsoft가 WCF로 해결 한 문제 입니다.

WCF를 사용하면 경계에 대한 걱정없이 서비스를 만들 수 있습니다. 그러면 호출 클라이언트에 따라 WCF가 가장 효율적인 방식으로 서비스를 실행하는 것에 대해 걱정하게 할 수 있습니다. 이 작업을 관리하기 위해 WCF는 끝점 개념을 사용합니다. 서비스에 여러 엔드 포인트가있을 수 있습니다 (디자인 타임 또는 배치 후 구성). 각 엔드 포인트는 서비스가 웹을 통해, 원격을 통해, MSMQ (Microsoft Message Queuing) 등을 통해 호출 클라이언트를 지원하는 방법을 나타냅니다. WCF를 사용하면 서비스 기능 작성에 집중할 수 있습니다. 발신 클라이언트와 가장 효율적으로 대화하는 방법에 대해 걱정합니다. 이러한 방식으로 단일 WCF 서비스는 여러 가지 다른 클라이언트 유형을 효율적으로 지원할 수 있습니다.

WCF의 예 :

예를 고려하십시오.

고객 데이터는 애플리케이션간에 공유됩니다. 각 응용 프로그램은 다른 플랫폼에서 작성 될 수 있으며 다른 위치에 존재할 수 있습니다. 공유 고객 데이터에 대한 공통 액세스를 제공하는 WCF 서비스로 고객 인터페이스를 추출 할 수 있습니다. 이를 통해 데이터를 중앙 집중화하고 복제를 줄이고 동기화를 제거하며 관리를 간소화합니다. 또한 WCF를 사용하여 호출 클라이언트에 적합한 방식으로 작동하도록 서비스 끝점을 구성 할 수 있습니다. 그림은 WCF 서비스에서 고객 데이터에 중앙 집중식으로 액세스 한 예를 보여줍니다.

이것이 WCF가 다른 클라이언트에게 서비스를 제공하는 방법입니다

결론:

i) 웹 API 선택시기 :

ASP.NET Web API를 사용하여 생성 된 것과 같은 REST 기반 HTTP 서비스가 웹 서비스 구축을위한 표준이되었다는 것을 부인할 수 없습니다. 이러한 서비스는 웹 개발자가 서비스를 구축 할 수있는 쉽고 간단한 접근 방식을 제공합니다. 웹 개발자는 HTTP GET 및 POST를 이해하므로 이러한 유형의 서비스에 잘 적응합니다. 따라서 HTTP를 엄격하게 대상으로하는 서비스 를 작성하는 경우 ASP.NET 웹 API가 논리적 선택입니다.

ii) WCF 선택시기 :

WCF 기술은 서로 다른 프로토콜 및 메시지 형식에 따라 여러 서비스 엔드 포인트를 지원해야 할 때 유용합니다. Microsoft BizTalk와 같은 제품은 WCF를 활용하여 웹과 다른 시스템 간 구성을 통해 사용할 수있는 강력한 서비스를 만듭니다. 그러나 로컬에 연결될 때 TCP / IP를 통해 통신하는 응용 프로그램을 작성해야합니다. 네트워크 외부에있을 때 HTTP를 통해 작동하고 WCF가 정답 입니다.

경고 받다:

웹 개발자는 종종 WCF를 개발하기가 더 어렵고 복잡하다고 생각합니다. 따라서 멀티 프로토콜 서비스가 필요하지 않다면 ASP.NET 웹 API를 사용하는 것이 좋습니다.


1
여러 질문에 동일한 답변을 추가하지 마십시오 . 충분한 평판을 얻으면 가장 좋은 것에 대답하고 나머지는 중복으로 표시하십시오. 복제본이 아닌 경우 게시물을 질문에 맞게 조정하고 삭제를 위해 플래그를 지정하십시오.
Bhargav Rao

12

이것에 대해 MSDN에서 비교가 있습니다.

WCF 및 ASP.NET 웹 API

나를 위해, 선택은 고객이 누구이며 어디에 있습니까?

회사 네트워크 및 .NET 기반 클라이언트 내에서 : TCP 바인딩으로 WCF 사용 (HTTP보다 빠른 통신)

회사 네트워크 외부에서 PHP, Python 등 다양한 기술 사용 : REST와 함께 웹 API 사용


9

비즈니스에 따르면 WebApi에는 WSDL이 없기 때문에 개발자는 모두 수동으로 문서화해야합니다. 예를 들어, WebApi 조작이 오브젝트 목록을 리턴하면 클라이언트는 오브젝트를 수동으로 작성해야합니다. 즉, WebAPI는 실제로 정의 오류가 발생하기 쉽습니다.

Webapi의 전문가는 WCF보다 가볍습니다.


3
WCF == WS- *, webapi == REST
BozoJoe 2016 년

7

"WebApi에 WSDL이 없음"명령문에 관해 Rest 클라이언트를 생성하는 몇 가지 방법이 있습니다. 인기있는 접근법 중 하나는 Swagger UI / (Swashbukkle Nuget)입니다. 이는 REST 엔드 포인트의 입력 및 출력 스키마와 엔드 포인트를 테스트하기위한 온라인 도구를 이해하기위한 풍부한 인터페이스를 제공합니다.

JSON LD (Json Linked Documents)는 JSON 스키마를 더 나은 의미로 노출하여 JSON 기반 REST 개발자 경험을 더욱 향상시키는 새로운 표준입니다.


1

wcf를 사용하면 tcp, http와 같은 여러 엔드 포인트에 대해 동일한 서비스 지원을 구성하고 노출 할 수 있습니다. 웹 API는 wcf와 비교할 때 구성이 매우 적으며 wcf보다 약간 빠릅니다. Wcf는 또한 편안한 서비스를 지원합니다. .Net framework 3.5의 한계가 있다면 wcf 옵션이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.