WCF와 ASMX 웹 서비스의 차이점은 무엇입니까?


375

WCF와 ASMX 웹 서비스가 완전히 혼동됩니다. 초기 단계에서 많은 웹 서비스를 사용했으며 이제 WCF라는 새로운 기능이 도입되었습니다. 웹 서비스로 작동하는 WCF를 계속 만들 수 있습니다. WCF에는 더 많은 것들이있을 것이라고 생각합니다.

WCF와 웹 서비스의 차이점은 무엇입니까? 각각 언제 사용해야합니까?


5
이것이 추천 질문 방법은 없습니다. ASMX 나 WCF는 제품이 아닙니다. 이들은 Microsoft 스택에서 두 가지 웹 서비스 반복입니다. 문제는 차이점이 무엇이며 새로운 것을 배우는 데 가치가 있습니까? 이것은 "Telerik 컨트롤 또는 Infragistics를 사용해야합니까?와 동일하지 않습니다.
— John Saunders

답변:


391

Keith Elder는 여기서 ASMX와 WCF를 잘 비교 합니다 . 확인 해봐.

ASMX와 WCF의 또 다른 비교는 여기에서 찾을 수 있습니다 -나는 모든 점에 100 % 동의하지는 않지만 아이디어를 줄 수 있습니다.

WCF는 기본적으로 "ASMX on stereoids"입니다. ASMX가 할 수있는 모든 것이 될 수 있습니다 . .

ASMX는 :

  • 쉽고 간단하게 작성 및 구성
  • IIS에서만 사용 가능
  • HTTP에서만 호출 가능

WCF는 다음과 같습니다.

  • IIS, Windows 서비스, Winforms 응용 프로그램, 콘솔 응용 프로그램에서 호스팅
  • HTTP (REST 및 SOAP), TCP / IP, MSMQ 및 더 많은 프로토콜과 함께 사용

간단히 말해 WCF는 ASMX를 완전히 대체하기 위해 여기에 있습니다.

MSDN 에서 WCF 개발자 센터를 확인하십시오 .

업데이트 : 링크가 죽은 것 같습니다 -Windows Communication Foundation이란 무엇입니까?


15
Visual Studio 2010 .net 4.0을 사용하면 WCF는 ASMX처럼 쉽게 작성할 수 있으므로 더 이상 ASMX를 작성할 수있는 변명이 없습니다. WCF는 더 빠르고 유연하며 안전합니다. ASMX는 레거시이므로 여전히 기간을 작성해서는 안됩니다.
— Tom Stickel

13
"대부분의 개발자는 ASMX에 IIS가 필요하다고 잘못 생각하지만 결국 유례없는 유스 케이스입니다. 그러나 ASMX에는 IIS에 대한 기술적 의존성이 전혀 없습니다." msdn.microsoft.com/en-us/magazine/cc163879.aspx
— MrNick이 28:12

2
@MrNick : 그렇습니다. IIS는 없지만 여전히 HTTP 전용이며 ASMX 호스팅 코드와 WCF 서비스 호스팅 코드를 비교하십시오.
— 존 손더스

1
불행히도 keithelder.net/2008/10/17/wcf-vs-asmx-webservices 링크 가 손상되었습니다.
— Robert

2
@codemonkeyliketab : 인터넷 시대 의 응답은 6 세 이상입니다! WCF 개발자 센터의 대체품을 찾으려고했습니다. 내 업데이트 참조
— marc_s

37

ASMX 웹 서비스는 HTTP (.asmx의 기존 웹 서비스)에 의해서만 호출 될 수 있습니다. WCF 서비스 또는 WCF 구성 요소는 모든 프로토콜 (예 : http, tcp 등) 및 모든 전송 유형에 의해 호출 될 수 있습니다.

둘째, ASMX 웹 서비스는 융통성이 없습니다. 그러나 WCF 서비스는 유연합니다. 새로운 버전의 서비스를 만드는 경우 새로운 목적을 공개해야합니다. 따라서 서비스는 민첩하며 현재 비즈니스 추세를 살펴 보는 매우 실용적인 접근 방식입니다.

계약, 인터페이스, 운영 및 데이터 계약으로 WCF를 개발합니다. 개발자로서 우리는 비즈니스 로직 서비스에 더 집중하고 있으며 채널 스택에 대해 걱정할 필요가 없습니다. WCF는 모든 종류의 서비스를위한 통합 프로그래밍 API이므로 서비스를 생성하고 구성 정보를 사용하여 HTTP / TCP / MSMQ 등과 같은 통신 메커니즘을 설정합니다.


11
어쩌면 나일지도 모르지만 단락 2와 3은 마케팅 BS로 두드러집니다.
— Neolisk

@Net Experts u는 "서비스의 새 버전을 만들면 새로운 목적을 공개해야한다"고 말했습니까?
— Mou

@Mou, 그는 새로운 endpoint것 같아요. 같은<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
— AlexMelw

25

이것은 매우 오래된 질문이지만 ASMX의 이점이 상당히 묘사되었다고 생각하지 않습니다. 매우 유연하지는 않지만 ASMX 웹 서비스는 사용 및 이해가 매우 간단합니다. WCF는 융통성이 있지만 일어 서서 구성하기가 더 복잡합니다.

ASMX 웹 서비스는 파일을 추가하자마자 일어 서서 웹 서비스 참조로 추가 할 수 있습니다. (프로젝트 빌드를 가정)

create webservice-> run webservice-> 의 간단한 개발 워크 플로의 add webservice reference경우 ASMX 웹 서비스에는 잘못 구성 할 수있는 부분이 거의없고 잘못 구성 할 수있는 부분이 거의 없습니다.

WCF가 ASMX를 대체한다고 주장하는 사람들에 대한 응답으로 WMX는 ASMX를 완전히 대체하기 위해 간소화 된 KISS 구성 모드를 추가해야한다고 대답합니다.

ASMX 웹 서비스에 대한 예제 web.config :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

WCF는 asmx 웹 서비스를 사용하여 수행 할 수있는 작업에 더 많은 구성이 필요하다고 생각하지 않으며 WCF 서비스에 대한 클라이언트 측에 참조를 추가 할 수 있으며 WCF는 asmx보다 훨씬 강력합니다 .asmx는 무엇을 할 수 있습니까? 그것은 asmx처럼 간단합니다
— Coder1409

9
@ Coder1409는 구성이 더 필요하기 때문에 확실히 더 많은 구성입니다. 바인딩, 검색 가능성 등 asmx에서는 필요하지 않습니다. 서비스 계약, 운영 계약, 데이터 계약, 데이터 멤버. asmx에서는 필요하지 않습니다. 물론 이런 것들이 wcf가 더 우수하고 강력하지만 왜 복잡성을 추가한다는 것을 부정하는 것은 정직하지 않습니다. 단점이 없다고 말하고 있습니다.
— Andrew Hoffman

7
내가 wcf를 만든 첫 번째 (두 번째, 세 번째 ...) 시간은 필요한 구성을 파악하는 데 오랜 시간이 걸렸습니다. "왜 그렇게해야합니까?" 나는 계속 나 자신에게 물었다. "왜 그렇게 복잡한 것을 방해합니까?" asmx는 즉시 작동했습니다. 따라서 그것이 간단하다는 것은 사실이 아닙니다. 어느 날 나는 내 시각을 완전히 이해하고 바꿀 것입니다-그 날까지 GRRRR !!!
— tomjm

1
@tomjm 다시 한 번, 최신 버전의 Visual Studio 및 .NET으로 다시 시도하십시오. 무엇보다도 구성 시스템이 기본 추가 설정으로 변경되었습니다. 특히, 기능이없는 간단한 웹 서비스 (http 전용)를 얻기 위해 URL을 지정하는 것 이상을 수행 할 필요는 없습니다.
— 존 손더스

1
@tomjm 잘 알고 있습니다. 솔직히 말해서 구성이 너무 많아서 wcf 구성 관리자 앱을 사용하는 것이 합리적이었습니다. 모든 것을 할 수 있습니다! (일부 기본 설정으로 즉시 사용할 수는 없지만 ) 요즘에는 WEB 서비스에 대해 더 간단하게 생각합니다. Wcf는 여전히 고급 서비스에는 적합하지만 아마도 대부분의 서비스 개발은 웹 서비스 개발 일 것이므로 웹 서비스 개발을위한 webapi2를 능가하기는 어렵습니다.
— Andrew Hoffman

10

WCF는 ASMX 웹 서비스를 완전히 대체합니다. ASMX는 웹 서비스를 수행하는 오래된 방법이며 WCF는 웹 서비스를 수행하는 현재 방법입니다. 클라이언트 또는 서버에서 모든 새로운 SOAP 웹 서비스 개발은 WCF를 사용하여 수행해야합니다.


32
문제는 ASMX가 단순한 모델 (매우 유연하지 않음을 의미 함) 인 반면, 단순한 모델 (가장 일반적인 웹 서비스 요구에 대해 사용하기 쉽고 이해하기 쉽다는 것)이었습니다. WCF는 많은 복잡성을 추가합니다. MS는 ASMX를 WCF로 교체하려고하지만 MS가 가장 일반적인 시나리오를 기존의 [Webmethod] 방법처럼 간단하게 만들 때까지 약간의 저항이있는 것 같습니다.
— mattmc3

6
WCF는 전혀 복잡하지 않습니다. 둘 다에 간단한 "hello world"웹 서비스를 작성하고 각각에 얼마나 많은 코드를 작성하는지 확인하십시오. 답은 WCF에서는 그다지 많지 않고 약간 더 많았습니다. 그리고, BTW, ASMX 이미 한 WCF로 대체되었습니다. 거래 완료
— John Saunders

58
"WCF는 전혀 복잡하지 않다"Ha. 내 길에 과장된 web.config를 알려주십시오.
— mattmc3

26
(다운 보 터는 아니지만 그 이유를 알려줄 것입니다)- "이것은 새롭고 오래되었습니다"는 사람이 신경 써야 할 중요한 차이가 아니기 때문입니다. 우리는 몇 살인 지에 대해서만 도구를 선택하지 않습니다. 망치는 실제로 아주 오래되었지만 여전히 손톱을 운전하는 데 가장 적합한 도구입니다. 그래서, 당신은 올바른 대답을 했어요. 예전의 "비행기에 있습니다"농담처럼 그렇게 도움이되지는 않습니다.
— Jasmine

5
다운 투표-참조가 없습니다. 이 정보를 어떻게 알 수 있습니까? 의견인가요? Microsoft에서 일하십니까? 참조를 추가하면 투표하겠습니다.
— tomjm

7

WCF를 통한 asmx 웹 서비스의 단순성에 대해 많은 대화가 진행되고 있습니다. 여기서 몇 가지 요점을 명확히하겠습니다.

  • 초보자 웹 서비스 개발자는 asmx 웹 서비스에서 쉽게 시작할 수 있습니다. Visual Studio는 모든 작업을 수행하고 Hello World 프로젝트를 쉽게 만듭니다.
  • 그러나 WCF를 배울 수 있다면 (물론 많은 시간이 걸리지 않을 것입니다) WCF도 매우 간단하다는 것을 알 수 있으며 쉽게 나아갈 수 있습니다.
  • WCF의 이러한 복잡성은 실제로 그와 함께 제공되는 아름다운 기능에 기인한다는 것을 기억하는 것이 중요합니다. 구성 파일에 언급 된 주소 지정, 바인딩, 계약 및 엔드 포인트, 서비스 및 클라이언트가 있습니다. 아름다움은 비즈니스 로직이 안전하게 분리되어 유지된다는 것입니다. 내일 바인딩을 basicHttpBinding 에서 netTcpBinding 으로 변경해야 할 경우 구성 파일에서 바인딩을 쉽게 만들어 사용할 수 있습니다. 따라서 클라이언트, 통신 채널, 바인딩 등과 관련된 모든 변경 사항은 비즈니스 로직을 안전하고 그대로 유지하는 구성에서 수행해야합니다.
  • WCF "웹 서비스"는 WCF를 통해 활성화 된 훨씬 광범위한 원격 통신의 일부입니다. WCF는 처음부터 Microsoft가 제공하는 다양한 분산 프로그래밍 인프라를 모두 요약하도록 설계 되었기 때문에 기존 ASMX보다 WCF에서 훨씬 더 높은 수준의 유연성과 이식성을 얻을 수 있습니다. WCF의 엔드 포인트는 TCP / 이진보다 SOAP / XML을 통해 쉽게 통신 할 수 있으며이 매체를 변경하는 것은 단순히 구성 파일 모드입니다. 이론적으로 이것은 비즈니스 요구, 목표 등을 이식하거나 변경할 때 필요한 새로운 코드의 양을 줄입니다.
  • 웹 서비스는 HTTP를 통해서만 액세스 할 수 있으며 WCF가 다른 유형의 응용 프로그램에서 호스팅 될 수 있기 때문에 WCF가 유연한 상태 비 저장 환경에서 작동합니다. 콘솔, Windows 서비스, IIS 및 WAS에서 WCF 서비스를 호스팅 할 수 있으며 Visual Studio에서 새 프로젝트를 만드는 다른 방법입니다.
  • ASMX는 WCF보다 오래된 것이므로 ASMX가 할 수있는 모든 것은 WCF (및 그 이상)가 될 수 있습니다. 기본적으로 WCF는 Microsoft의 세계에서 두 개의 앱이 통신하도록하는 여러 가지 방법을 논리적으로 그룹화하려는 것으로 볼 수 있습니다. ASMX는 이러한 여러 가지 방법 중 하나 였으므로 이제 WCF 기능 그룹으로 그룹화되었습니다.
  • WCF 서비스를 만드는 동안 편리하게 사용할 수 있도록 Visual Studio for NET 4.0 또는 4.5를 항상 사용하려고합니다.
  • 가장 큰 차이점은 웹 서비스가 XmlSerializer를 사용한다는 것입니다. 그러나 WCF는 XmlSerializer와 비교하여 성능이 더 우수한 DataContractSerializer를 사용합니다. 그렇기 때문에 WCF가 asmx, .NET remoting 등과 같은 .NET의 다른 통신 기술에 비해 성능이 뛰어납니다.

내가 WCF보다 asmx 서비스를 더 좋아했던 사람들 중 하나라는 것을 잊지는 않았지만 그 당시에는 WCF 서비스와 그 기능을 잘 알지 못했습니다. WCF 구성이 무서웠습니다. 그러나 나는 감히 WCF 서비스를 거의 작성하지 않았으며 WCF에 대해 더 많이 알게되면 WCF에 대한 제한이 없으므로 누구에게나 모든 사람에게 권장합니다. 행복한 코딩 !!!

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