WCF가 기준을 높이거나 복잡성 수준을 높입니까? [닫은]


84

WCF에서 제공하는 세 부분으로 구성된 서비스 / 호스트 / 클라이언트 모델의 가치를 이해합니다. 그러나 그것은 나뿐입니까, 아니면 WCF가 매우 직접적이고 간단한 것을 취하여 (ASMX 모델) 엉망으로 만든 것처럼 보입니까?

SvcUtil의 명령 줄 단계를 사용하여 프록시를 생성하는 대신 사용할 수 있습니까? ASMX 서비스를 통해 테스트 장치가 자동으로 제공되었습니다. 오늘 WCF에 좋은 대안이 있습니까?

WS * 항목이 WCF와 더 밀접하게 통합되어 있다는 점에 감사하고 WCF에 대한 보상을 찾을 수 있기를 바라지 만, 그렇지 않으면 당황합니다.

또한 WCF에서 사용할 수있는 책의 상태는 기껏해야 최악입니다. 뛰어난 저자 인 Juval Lowy는 훌륭한 O'Reilly 참고서 인 "Programming WCF Services"를 썼지 만 지금은 WCF 사용법을 배우기 위해 그렇게 많이하지 않습니다. 그 책의 선구자 (그리고 조금 더 잘 정리되어 있지만 튜토리얼처럼 많지는 않다)은 Michele Leroux Bustamante의 Learning WCF입니다. 좋은 점이 있지만 구식이며 해당 웹 사이트가 사라졌습니다.

Google에 계속해서 bejebus를 계속하는 것 외에 좋은 WCF 학습 참조가 있습니까?


3
WCF 서비스를위한 좋은 테스트 클라이언트를 찾고 있다면. 보다 더 봐 msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok

답변:


61

좋아, 간다. 먼저 Michele Leroux Bustamante의 책이 VS2008 용으로 업데이트되었습니다. 책의 웹 사이트가 사라지지 않았습니다. 지금 작동 중이며 훌륭한 WCF 정보가 많이 있습니다. 해당 웹 사이트에서 그녀는 책의 모든 예제에 대해 VS2008과 호환되는 업데이트 된 코드를 제공합니다. 아마존에서 주문하면 업데이트 된 재 인쇄물을 받게됩니다.

WCF는 ASMX를 대체 할 뿐만 아니라 물론 ASMX를 대체 할 수 있고 잘 수행하지만 실제 이점은 서비스를 자체 호스팅 할 수 있다는 것입니다. WSE의 대부분의 기능은 처음부터 구워졌습니다. 프레임 워크는 고도로 구성 가능하며 여러 프로토콜을 통해 여러 엔드 포인트를 제공하는 능력은 놀랍습니다. IMO입니다.

"서비스 참조 추가"옵션에서 프록시 클래스를 생성 할 수는 있지만 반드시 필요한 것은 아닙니다. 정말로해야 할 일은 ServiceContract 인터페이스를 복사하고 서비스에 대한 엔드 포인트를 찾을 위치를 코드에 알리는 것뿐입니다. 아주 적은 코드로 서비스에서 메서드를 호출 할 수 있습니다. 이 방법을 사용하면 구현을 완전히 제어 할 수 있습니다. 프록시 클래스를 생성하기 위해 선택한 방법에 관계없이 Michele은 주제에 대한 훌륭한 웹 캐스트 시리즈 에서 두 가지를 모두 보여주고 사용합니다 .

Michele은 수많은 훌륭한 자료를 보유하고 있으며, 그녀의 웹 사이트를 확인하는 것이 좋습니다. 다음은 WCF를 배우면서 저에게 매우 도움이 된 몇 가지 링크입니다. WCF가 실제로 얼마나 강력한 지, 그리고 구현하기가 얼마나 쉬운 지 알게되기를 바랍니다. 학습 곡선은 약간 가파르지만 시간 투자에 대한 보상은 그만한 가치가 있습니다.

Michele의 웹 캐스트 중 하나 이상을 시청하는 것이 좋습니다. 그녀는 매우 효과적인 발표자이며 WCF와 관련하여 매우 지식이 풍부합니다. 그녀는 처음부터 WCF의 내부 작동을 이해하는 데 큰 역할을합니다.


3
훌륭한 자원. 나는 rp가 WCF 또는 저자를 강타하고 있다고 말하는 데까지 가지 않을 것입니다. 저도 ASMX에서 많은 시간을 보낸 후 WCF를 보려고 시도하면서 약간 압도 감을 느꼈습니다. 나는 그것이 더 낫다는 것을 알고 그것을 경험하고 싶지만 ASMX로 할 수있는 것과 같은 진입 점을 찾기가 어렵습니다.
Chris Stewart

15

링크 주셔서 감사합니다. 그냥 궁금해서 Buddhike에게 무슨 일이 일어 났는지 아십니까? 그는 지구상에서 사라진 것 같습니다. 그가 blogs.thinktecture.com/buddhike 에서 언급 한 새 블로그는 더 이상 존재하지 않습니다. 그가이 필멸의 코일에서 뒤섞인 것 같습니다. (어떤 꿈이 올까요?) 감사합니다.
Jim Raden


14

WCF를 언제 사용해야하는지, 언제 사용할지 알기가 어렵습니다. 왜? 생산성과 단순성을 제 목록 위에 두었 기 때문입니다. ASMX 모델이 왜 그렇게 성공적 이었습니까? 작동하고 빠르게 작동하기 때문입니다. 그리고 VS 2005 및 .NET 2.0에서 wsdl.exe는 꽤 훌륭하고 호환되는 서비스를 뱉어 냈습니다.

실제 생활에서는 아키텍처에 통신 프로토콜이 거의 없어야합니다. 이것은 유지 보수를 간단하게 유지합니다. 레거시 시스템에 액세스해야하는 경우 해당 시스템에 대한 특정 어댑터를 작성하여 멋지고 아름다운 SOA 세계에서 함께 플레이 할 수 있습니다.


WCF는 이러한 모든 프로토콜에 대한 단일 프레임 워크를 목표로합니다. SOAP, REST를 수행하며 WSCF 어댑터 SDK를 사용하여 WCF 모델 내에서 이러한 "레거시 시스템"연결도 수행합니다.
Cheeso

3
"생산성"을 측정하는 방법에 따라 다릅니다. 나는 오히려 개발자가 6 개월 안에 혜택을 볼 수 있기 때문에이 문제를 해결하는 데 2 ​​~ 3 일이 걸립니다. WCF는 웹 서비스 이상의 것을 대체합니다.
Christian Payne

1
100 % 동의합니다. 웹 서비스를 원하고 신속하게 배송해야한다면 (누가 원하지 않습니까?) ASMX가 필요합니다! WCF는 거대한 망치입니다. 기본 웹 서비스 만 있으면됩니다. 반짝이는 새로운 것이 모든 시나리오에 대해 항상 더 나은 것으로 가정해야 함을 의미하지는 않습니다. WCF가 이해하기 어렵다고해서 당신이 그것을 선택하는 현명한 사람이되지는 않습니다. WCF 악 대차에 뛰어 드는 것을 거부하는 용기를 가진 사람들에게 더 많은 힘!
saille

13

WCF는 ASMX보다 훨씬 강력하며 여러 가지 방법으로 확장됩니다. ASMX는 HTTP로만 제한되는 반면 WCF는 통신을 위해 여러 프로토콜을 사용할 수 있습니다 (허용되지만 HTTP는 여전히 상호 운용성이 필요한 서비스에 대해 대부분의 사람들이 사용하는 방식 임). WCF는 확장하기도 더 쉽습니다. 적어도 ASMX를 확장 할 수없는 방식으로 확장 할 수 있습니다. "쉬운"을 늘릴 수 있습니다. =)

제 생각에는 WCF에서 제공하는 추가 기능이 추가되는 복잡성보다 훨씬 큽니다. 또한 프로그래밍 모델이 더 쉽다고 느낍니다. DataContracts는 예를 들어 모든 것에 대한 공용 속성이있는 XML 직렬화를 사용하여 직렬화하는 것보다 훨씬 좋습니다. 또한 본질적으로 훨씬 더 선언적입니다.


6

잠깐 .... .NET Remoting을 사용해 본 적이 있습니까? 그게 진짜 대체품이기 때문입니다. .NET Remoting은 그 자체로 매우 복잡합니다. WCF가 더 쉽고 더 잘 배치되어 있습니다.


4

자주 언급되지는 않지만 ASMX 서비스와 매우 유사한 WCF를 사용하여 상당히 간단한 서비스를 구현할 있습니다. 예를 들면 :

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

web.config에 끝점을 등록해야하지만 그렇게 나쁘지는 않습니다.

분리 된 데이터, 서비스 및 운영 계약의 장황함을 제거하면 WCF를보다 쉽게 ​​관리 할 수 ​​있습니다.


AspNetCompatibilityRequirements는 많은 개발자가 현재 잘 작동하는 ASMX 서비스에서 전환하려는 경우 필요한 악입니다.
Dave Ward

@danAspNetCompatibilityRequirements가 아닌가요 ?
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements는 필요한 악 입니까?
PreguntonCojoneroCabrón

4

VS2008에는 백그라운드에서 프록시를 생성하는 "서비스 참조 추가"컨텍스트 메뉴 항목이 포함되어 있습니다.

앞서 언급했듯이 WCF는 ASMX 웹 서비스 유형을 대체하기위한 것이 아니라 HTTP, tcp, 명명 된 파이프 또는 MSMQ 전송을 통한 모든 상호 운용 가능한 서비스에 대해 일관되고 안전하며 확장 가능한 방법론을 제공하기위한 것입니다.

나는 WCF와 관련하여 다른 문제가 있음을 고백 할 것입니다 (예 : basicHTTP를 통해 서비스를 노출 할 때 메서드 서명을 다시 작성- 여기를 참조 하십시오 . 그러나 전반적으로 확실한 개선이라고 생각합니다.


3

VS2008을 사용하고 WCF 프로젝트를 만드는 경우 실행 / 디버그를 누를 때 자동으로 테스트 도구를 얻고 svcutil을 사용하지 않고도 참조를 추가 할 수 있습니다.


2

WCF에 대한 나의 초기 생각은 똑 같았습니다! 다음은 몇 가지 해결책입니다.

  1. 제네릭을 사용하여 자체 프록시 / 클라이언트 계층을 프로그래밍합니다 ( ClientBase , Binding 클래스 참조 ). 일하기는 쉽지만 완벽하기는 어렵습니다.
  2. 1의 타사 구현을 사용합니다 ( SoftwareIsHardwork 가 현재 가장 선호하는 항목입니다).

2

WCF 는 Microsoft의 모든 이전 웹 서비스 기술을 대체합니다 . 또한 전통적으로 "웹 서비스"로 간주되는 것보다 훨씬 많은 일을합니다.

WCF "웹 서비스"는 WCF를 통해 사용할 수있는 훨씬 더 광범위한 원격 통신 스펙트럼의 일부입니다. WCF는 Microsoft에서 제공하는 다양한 분산 프로그래밍 인프라를 모두 요약하도록 처음부터 설계 되었기 때문에 기존 ASMX를 통하는 것보다 WCF에서 작업을 수행하는 데 훨씬 더 높은 수준의 유연성과 이식성을 얻을 수 있습니다. WCF의 끝점은 TCP / 바이너리를 통해 수행 할 수있는 것처럼 SOAP / XML을 통해 쉽게 통신 할 수 있으며이 매체를 변경하는 것은 단순히 구성 파일 모드입니다. 이론적으로 이는 비즈니스 요구, 대상 등을 이식하거나 변경할 때 필요한 새 코드의 양을 줄입니다.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). 기본적으로 WCF는 두 개의 앱이 Microsoft 세계에서 통신하도록하는 모든 다른 방법을 논리적으로 그룹화하려는 것으로 볼 수 있습니다. ASMX는 이러한 여러 방법 중 하나 일 뿐이므로 이제 WCF 기능 우산 아래에 그룹화됩니다.

웹 서비스는 HTTP를 통해서만 액세스 할 수 있으며 다양한 유형의 응용 프로그램에서 서비스를 호스팅 할 수 있기 때문에 WCF가 유연한 상태 비 저장 환경에서 작동합니다. WCF 서비스 호스팅을위한 일반적인 시나리오는 IIS, WAS, 자체 호스팅, 관리되는 Windows 서비스입니다.

가장 큰 차이점은 웹 서비스가 XmlSerializer를 사용한다는 것입니다. 그러나 WCF는 XmlSerializer에 비해 성능이 더 우수한 DataContractSerializer를 사용합니다.

WCF를 사용해야하는 시나리오

  • 비즈니스 트랜잭션을 처리하는 안전한 서비스입니다. 서비스
  • 교통 보고서 또는 기타와 같은 다른 사람에게 현재 데이터를 제공합니다.
  • 모니터링 서비스. 두 사람이 할 수있는 채팅 서비스
  • 실시간으로 통신하거나 데이터를 교환합니다. 대시 보드 애플리케이션
  • 데이터에 대해 하나 이상의 서비스를 폴링하고이를 논리적
  • 표시. Windows Workflow를 사용하여 구현 된 워크 플로 노출
  • WCF 서비스로서의 기초. 폴링하는 Silverlight 응용 프로그램
  • 최신 데이터 피드 서비스.

WCF의 특징

  • 서비스 방향
  • 상호 운용성
  • 여러 메시지 패턴
  • 서비스 메타 데이터
  • 데이터 계약
  • 보안
  • 다중 전송 및 인코딩
  • 안정적이고 대기중인 메시지
  • 내구성있는 메시지
  • 업무
  • AJAX 및 REST 지원
  • 확장 성

출처 : 텍스트의 주요 출처


이제 WCF 또는 REST를 사용합니까? 또는 WebAPI? 또는 MicroService?
PreguntonCojoneroCabrón

1

MSDN? 나는 보통 도서관 참조 자체를 꽤 잘 다루며, 보통 거기에서 귀중한 기사를 찾을 것으로 기대합니다.


1

그것이 제공하는 것 측면에서 대답은 호환성이라고 생각합니다. ASMX 서비스는 꽤 마이크로 소프트였습니다. 그들이 다른 소비자들과 양립하려고하지 않았다고 말하는 것은 아닙니다. 그러나이 모델은 ASP.NET 웹 페이지와 일부 다른 사용자 지정 Microsoft 소비자 외에는 많이 맞지 않습니다. 반면 WCF는 아키텍처로 인해 서비스가 일반적인 SOAP 외에도 REST, JSON 등과 같은 개방형 표준 기반 엔드 포인트를 가질 수 있도록합니다. 다른 사람들은 ASMX 서비스보다 WCF 서비스를 훨씬 쉽게 소비 할 것입니다.

(이것은 기본적으로 비교 MSDN 독서에서 추론하므로 더 많은 것을 아는 사람은 나를 고쳐 주시기 바랍니다.)


크로스 플랫폼 ASMX 서비스에는 문제가 없었습니다. XML이 아주 잘 작동합니다. WCF = 원격 + ASMX + MSMQ + WSE를 이해합니다. 내 소고기는 MS가 WCF를보다 쉽게 ​​접근 할 수 있도록하기 위해 약간의 "점진적 향상"을 사용해야한다는 것이며 내 질문은 방법입니다! 감사합니다, rp
rp.

ASMX 상호 운용성은 매우 좋았지 만 WS-Security가 관련되었을 때 더 많은 노력이 필요했습니다.
Cheeso

1

WCF는 ASMX를 대체하는 것으로 생각해서는 안됩니다. Microsoft에서 어떻게 배치되고 내부적으로 사용되는지를 고려할 때 실제로 모든 유형의 경계 간 통신에 사용되는 기본 아키텍처 조각입니다.


예 ... 기본 통신 프레임 워크로서 ASMX 및 ASP.NET 지향 웹 서비스를 대체해야합니다. 아니?
Cheeso

1

저는 WCF가 실제로 여러면에서 ASMX 웹 서비스 구현을 발전 시킨다고 믿습니다. 우선 분산 애플리케이션의 본질적인 복잡성을 숨기는 데 도움이되는 매우 멋진 계층화 된 개체 모델을 제공합니다. 두 번째로 서버에서 클라이언트로의 비동기 알림 (순수 HTTP에서는 불가능), 세 번째로 XML 메시징에서 기본 전송 프로토콜을 추상화하여 HTTP, HTTPS, TCP 및 기타를 우아하게 지원하는 등 요청-재생 메시징 패턴 이상을 가질 수 있습니다. "1 세대"웹 서비스와의 역 호환성도 장점입니다. WCF는 XML 표준을 내부 표현 형식으로 사용합니다. 이것은 특히 JSON과 같은 "XML에 대한 무 지방 대안"의 인기가 높아지면서 장점 또는 단점으로 인식 될 수 있습니다.


1

WCF에서 찾은 어려운 점은 클라이언트 및 서버의 구성을 관리하고 좋지 않은 오류 상태 예외 문제를 해결하는 것입니다.

누군가에 대한 지름길이나 팁이 있다면 좋을 것입니다.


1

나는 그것이 고통이라는 것을 안다. 양쪽 끝에 .NET이 있고 양쪽 끝에 동일한 "계약"dll이로드되어 있습니다.하지만 "KnownType"속성과 같은 많은 세부 정보를 처리해야합니다.

WCF는 또한 많은 구성을 변경할 때까지 1 개 또는 2 개의 클라이언트 만 서비스에 연결하도록 기본 설정합니다. 코드에서 구성을 변경하는 것은 쉽지 않습니다. 많은 comfig 파일을 제공하는 것은 선택 사항이 아닙니다. 업그레이드 당시 고객이 변경 한 사항에 변경 사항을 병합하기가 너무 어렵 기 때문입니다 (또한 고객이 WCF 설정으로 재생!)

.NET 원격은 대부분의 경우에만 작동하는 경향이 있습니다.

내가하려고 생각 .NET 객체 기반 통신에 그 .NET하는 알 수없는 시스템에 텍스트 (XML)의 그래서 비트를 전송과 동일, 너무 멀리 단계였다.

(Java 시스템과 통신하기 위해 WCF를 몇 번 사용했지만 Java 시스템이 제공 한 XSD가 어쨌든 원하는 XML과 일치하지 않아 많은 XML 매핑을 직접 코딩해야했습니다.)


사람들이 WCF가 원격 기능을 대체한다고 말할 때 사람들이 약간 벗어나 있다고 생각합니다. Remoting은 실제 .Net에서 .Net 개체 기반 호출을 수행하고 양쪽 끝에서 설정되는 방식을 충분히 제어하려는 경우 여전히 좋은 옵션입니다. 반면 WCF는 누구나 원하는 방식으로 사용할 있도록 서비스를 게시 하는 데 적합합니다.
Tim Lovell-Smith

@Tim, Microsoft는 이제 모든 것에 WCF를 사용하고 Remoting을 대체한다고 말합니다. Remoting은 .net 세계에서 잊혀진 자식 인 것 같습니다.
이안 Ringrose
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.