2010-04-10 6 views
9

저는 대학에 갔을 때 선생님은 구조화 된 응용 프로그램에서 프레젠테이션 계층, 비즈니스 계층 및 데이터 계층이 있다고 말했었습니다. 이것은 내가 5 년 이상 동안 들었던 것이다.n 계층 응용 프로그램의 WCF 서비스 계층 : 성능 고려 사항

내가 작업을 시작했을 때 나는 이것이 사실이지만 3 가지 이상의 레이어를 갖는 것이 더 나은 경우가 있음을 발견했습니다. 2-3 일 전에 John Papa가 Entity Framework를 계층화 된 응용 프로그램에서 사용하는 방법을 설명하는 this article을 발견했습니다. 그 기사에 따르면, 당신은해야합니다

  • UI 레이어와 프리젠 테이션 레이어 (모델보기 패턴)
  • 서비스 레이어 (WCF)
  • 비즈니스 계층
  • 데이터 액세스 계층

서비스 레이어는 내가 일한 이후로 내가 들어 본 최고의 아이디어 중 하나입니다. 그러면 UI가 비즈니스 및 데이터 레이어에서 완전히 "연결 해제"됩니다. 이제 제공된 소스 코드를 들여다 보니 몇 가지 질문이 생기기 시작했습니다. 그들에게 대답하는데 나를 도울 수 있니?

질문 # 0 :이 질문은 귀하의 의견으로는 좋은 기업 응용 프로그램 템플릿입니까?

질문 1 : 서비스 계층을 어디에서 호스팅해야합니까? 그것은 Windows 서비스인가 아니면 다른 것입니까?

질문 2 : 제공되는 소스 코드에서 서비스 계층은 WSHttpBinding이있는 끝점 만 노출합니다. 이것은 가장 상호 운용 가능한 바인딩이지만 (객체의 직렬화 및 비 직렬화로 인해) 성능면에서 최악입니다. 동의하니?

질문 3 : 질문 2에서 나와 동의하는 경우 어떤 종류의 바인딩을 사용 하시겠습니까?

앞으로 연락 드리겠습니다. 좋은 주말 되세요!

마르코

답변

5

질문 # 0 :이 당신의 의견에 좋은 enterpise 응용 프로그램 템플릿입니까?

예, 대부분의 중간 업무용 응용 프로그램은 아마도 좋은 출발점 일 것입니다.

질문 1 : 서비스 계층을 호스팅해야하는 곳은 무엇입니까? 그것은 Windows 서비스 여야합니까? 아니면 다른 서비스가 필요합니까?

WCF 서비스를 사용하는 데 심각한 문제가있는 경우 Windows 서비스에서 자체 호스팅하는 것이 좋습니다. 왜? 서버에 IIS가 없어도 서비스를 호스팅하기 위해 IIS에 의존 할 필요가 없으며 원하는대로 서비스 주소를 선택할 수 있으며 옵션을 완벽하게 제어 할 수 있습니다.

질문 # 2 : 서비스 계층에서 제공하는 소스 코드 에 WsHttpBinding과 가진 다만 엔드 포인트를 노출합니다. 이 은 가장 상호 운용 가능한 바인딩이지만 (나는 생각한다)은 공연의 측면에서 최악의 경우입니다 (직렬화 및 객체의 비 직렬화로 인한 것임). 에 동의하십니까?

아니요, 가장 호환성이 좋은 것은 보안이없는 basicHttpBinding입니다. 모든 SOAP 스택이 연결될 수 있습니다. 또는 webHttpBinding을 RESTful 서비스로 사용하십시오.이 경우 SOAP이 필요하지 않습니다. HTTP 스택 만 수행하면됩니다.

우리는 무엇을 사용합니까 ?? 내부적으로

  • , 인트라넷 시나리오 플레이 (서버 및 기업 방화벽 클라이언트)에있는 경우 : 항상 netTcp - 그것은 최고의, 가장 빠른, 가장 다재다능한입니다. :-((방화벽에서 포트를 열어야합니다 - 항상 번거 로움)하지만 인터넷을 통해 잘 작동하지 않는 외부

  • : webHttpBinding 또는 basicHttpBinding, 대부분 때문에 non-.NET 플랫폼과의 통합 용이성의

  • 0 : 여기에

+1

좋아요, 내부 응용 프로그램에 내 비즈니스 계층을 열어야하는 시나리오에서는 netTcp를 제안하지만 외부 응용 프로그램에 액세스해야한다면 webHttpBinding 또는 webHttpBinding을 제안하십시오. 완전한. 고마워. – Marconline

+0

네, 확실히 내부 애플 리케이션 및 액세스를위한 netTcp를 사용하십시오 - 최선의 선택. 외부 적으로는 일반적으로 불가능합니다 (트래픽이 통과하려면 방화벽에 구멍을 뚫어야한다는 사실 때문에 - 대부분 불가능한 일입니다 ...) –

1

내 5 센트 예

1 :. 나는 그것을 아주 쉽게 그리고 당신이 어딘가에 빨리 도착하기 때문에 IIS에서 호스팅으로 시작하는 것

2 : 보안이 필요하다면 분명히 예, WSHttpBinding (또는 더 많은 fance 보안을 원한다면 wsFederationHttpBinding)으로 가십시오. 그것은 당신이 말했듯이 약간의 오버 헤드가 있고 다른 플랫폼 (예 : java)에서 호출하기가 꽤 어려울지라도 실제로는 상당히 빠르게 수행됩니다.

3 : N/

마지막으로, 서비스 DLL 당신의 UI 계층의 소비자에서 모두 참조 할 수있는 별도의 조립에 서비스의 데이터 계약 객체를 정의하기 위해 기억를했다.

+0

의견을 보내 주셔서 감사합니다. – Marconline

1

선생님들도 그러한 아키텍처를 만드는 이유를 알려주셨습니까 ?-)? 귀하의 질문에 빠진 것은 귀하의 요구 사항입니다. 이 아키텍처가 좋은 아키텍처인지 템플리트인지 알려주지 않으려면 애플리케이션 요구 사항을 알아야합니다. 응용 프로그램의 기능적 요구 사항이나 성능이 아키텍처 설계를 주도해야합니다.

응용 프로그램의 가장 중요한 비 기능 요구 사항은 무엇입니까? (유지 보수성, 이식성, 신뢰성 또는 ...). 예를 들어 http://en.wikipedia.org/wiki/ISO/IEC_9126 또는 http://www.serc.nl/quint-book/

나는 건축가가 비즈니스 요구 사항을 기반으로 아키텍처를 만들어야한다고 생각합니다. 이는 건축가가 비 기능 요구 사항의 중요성을 비즈니스가 인식하도록해야 함을 의미합니다.

질문 # 0 : 귀하의 의견으로는 이것이 훌륭한 영예 응용 프로그램 템플릿입니까?

레이어 아키텍처 패턴을 사용하면 레이어가 서로 쉽게 독립적으로 진화 할 수 있습니다. 가장 많이 사용되는 아키텍처 패턴 중 하나 인이 패턴에는 단점 (성능, 추적 성)이 있습니다.

질문 # 1 : 서비스 계층을 어디에 호스팅해야합니까? 그것은 Windows 서비스인가 아니면 다른 것입니까?

대답하기가 어렵습니다. IIS에서 서비스를 호스팅하는 데는 두 가지 이점이 있습니다. 확장이 쉽고 추적 성이 더 쉽습니다 (IIS의 WCF에는 많은 모니터 옵션이 있습니다). Windows 서비스에서 서비스를 호스팅하면 더 많은 바인딩 옵션 (명명 된 파이프 바인딩/TCP 바인딩)이 제공됩니다.

질문 2 : 제공된 소스 코드에서 서비스 계층은 WSHttpBinding이있는 끝점 만 노출합니다. 이것은 가장 상호 운용 가능한 바인딩이지만 (객체의 직렬화 및 비 직렬화로 인해) 성능면에서 최악입니다. 동의하니?

성능면에서 WSHttpBinding의 성능은 더 높지만 상호 운용성은 높습니다. 따라서 선택은 비 기능적 요구 사항에 달려 있습니다.

질문 # 3 : 당신이 질문 2에 동의한다면, 어떤 종류의 바인딩을 사용하겠습니까?

명명 된 파이프와 TCP 바인딩은 매우 빠릅니다. 이름 파이프 바인딩은 단일 기계에서 통신 할 때만 사용해야합니다. TCP 바인딩은 옵션 일 수 있지만 방화벽에서 특수 포트를 열어야합니다.

관련 문제