2012-10-12 2 views
5

우리는 기존의 타사 도구 (C/C++로 개발 됨)를 보유하고 있습니다. 이 도구에는 작업을 실행하는 Windows 서버를 실행하는 서버 구성 요소가 있습니다 (복잡한 체인화 된 긴 데이터베이스 쿼리). 또한 모든 사용자의 데스크톱에 클라이언트 모듈이 설치되어 사용자가 작업을 추가하고 실행중인 작업 및 진행 상황을 확인하고 작업을 삭제할 수 있으므로 기본적으로 작업을 관리 할 수 ​​있습니다. 우리는 .NET 기술을 사용하여 집에서 그러한 도구를 개발하려고합니다..NET에서이 클라이언트/서버 응용 프로그램을 구성하는 방법은 무엇입니까?

현재 우리는 그러한 도구를 설계하는 방법을 생각하고 있으며 퍼즐의 중요한 일부가 누락 된 것처럼 보입니다.

클라이언트 : 우리는 WPF

서버에서 개발되는 클라이언트 데스크톱 응용 프로그램을 결정 : 현재 우리는 콘솔 응용 프로그램으로 개발하지만 어떻게 그것을 건축가에 확신하지 생각하고있다.

주요 질문에 우리가 (WPF 클라이언트가 작업의 상태를 얻을 수 있도록) 작업을 계속 실행되면서

방법 서버 콘솔 응용 프로그램은 ASMX 또는 WCF 웹 서비스를 노출 할 수 있습니까?

변경 사항이있을 때 서버에서 WPF 클라이언트로 진행 업데이트를 푸시하는 방법은 무엇입니까?

우리는이 작업을 수행하는 방법을 연구하려고하지만 주제와 관련된 것을 찾지 않습니다. 기사/지침에 대한 조언은 큰 도움이 될 것입니다.

+0

가능한 복제본 : http://stackoverflow.com/questions/11170457/discussion-client-server-application-architecture –

+0

@MikeMcCaughan 당신이 언급 한 링크는 유사하지만 내 경우에는 그렇지 않습니다. 클라이언트에게 서비스를 제공하는 것 외에도 장기간 실행해야 할 작업이 있습니다. – Aron

+0

시험해보십시오. http://dasunhegoda.com/architecture-products/1180/ – Techie

답변

3

혼란은 작업 실행과 WCF 끝점이 같은 것으로 가정하는 것입니다. 이 세 가지 주요 항목으로 나눕니다 :

  1. 클라이언트 작업 관리를위한 UI 요소가있는 클라이언트 응용 프로그램.
  2. 작업 정보를 검색하고 작업 요청 만들기/삭제를 보내는 WCF 서비스 끝점입니다.
  3. 작업을 실행하는 응용 프로그램입니다.

클라이언트 응용 프로그램

클라이언트 응용 프로그램은 WCF 서비스를 통해 작업 데이터를 검색합니다.당신은 클라이언트 응용 프로그램에 필요한 엔드 포인트를 노출 할 작업/등

WCF 서비스

WCF 서비스/삭제 작업을 만들어 실행 작업 /를보기 위해 화면을 제공 할 것입니다. 여기에는 CreateJob, ViewJobs, DeleteJob 등의 항목이 포함될 수 있습니다. 서비스는 데이터베이스 백엔드에 대한 읽기/쓰기 작업을 수행해야합니다.

작업 응용 프로그램

작업 응용 프로그램은 새로운/삭제 작업에 대한 폴링하고 작업을 완료하는 데 필요한 무엇이든 수행 할 것입니다. WCF 서비스가 읽는 데이터베이스 백엔드에서 작업 상태를 업데이트합니다. SQL 작업, Windows 서비스, 콘솔 응용 프로그램 등이 될 수 있습니다 (아마도 Windows 서비스를 만들려고합니다. 아마도 작업을 처리하기 위해 항상 실행중인 무언가를 원할 것이기 때문입니다).

질문이 부정되는 작업을 실행하는 응용 프로그램에서 WCF 서비스를 분리하여

How can a server console application expose ASMX or WCF web services(so that WPF clients get the status of the jobs) WHILE CONTINUING TO RUN THE JOBS?

. 참고 : WCF 및 작업 실행자를 호스팅하는 콘솔 응용 프로그램을 가질 수 있지만 개념적으로는 별도의 것으로 생각합니다 (동일한 콘솔 응용 프로그램에서의 호스팅은 구현 세부 사항입니다).

How to push progress updates from server to the WPF clients when there is a change?

나는이 작업을 수행하지 않을 것입니다. UI를 수시로 폴링하거나 WCF 끝점을 통해 상태를 검색하는 새로 고침 단추를 제공합니다.

절대적으로이 작업을 수행해야하는 경우 작업을 실행하면서 메시지를 게시하기 위해 Job Executer가 필요하며 클라이언트 응용 프로그램은 이러한 메시지 (MSMQ, 서비스 버스 구현, BizTalk 등)를 수신해야합니다. 내가 할 이유

내가 그것에 대해 내가 밀어 스타일을 할 것입니다 경우, 일부 어디 설문 조사 아마 있다고 생각 이제 서버 푸시

에 폴링을 선호합니다.

오프 사이트에있는 클라이언트가 많은 경우 (VPN 또는 일반 인터넷을 통해 연결하는 경우) 대역폭과 네트워크 대기 시간이 매우 길기 때문에 클라이언트를 폴링해야합니다. 클라이언트 수가 많으면 모든 구독 메시지마다 모든 업데이트 메시지를 보내야합니다. 이 경우 나는 모델에 말하지 말라는 질문에 간다.

고객이 집에 있고 실시간 정보를 스트리밍해야하는 경우 푸시 모델이 더 적합합니다. 이 경우 클라이언트는 서버 응용 프로그램에 연결할 수 있으며 연결을 통해 메시지를 앞뒤로 보낼 수 있습니다 (개인적으로이 작업을 수행하지 않았으므로 소켓을 설정하는 방법에 대한 권장 사항이 없으므로 소켓보다 더 높은 수준이 될 수 있습니다).

메시지가 업데이트가 발생하지만 클라이언트가 여러 위치에 있으면 상황이 좋을 경우 게시/하위 모델이 가장 적합 할 수 있습니다. pub/sub에서 애플리케이션은 업데이트 메시지가 발생할 때이를 푸시합니다. 메시징 시스템은 메시지를 구독하는 클라이언트가 있는지 확인하고 메시징 시스템을 구독하는 모든 클라이언트에 대해 메시지 사본을 전달합니다. 예에서 클라이언트는 작업 메시지에 subscribe을 보내고 메시징 시스템은 클라이언트가 지정한 위치로 업데이트를 보냅니다 (클라이언트는 메시지를 수락 할 방법이 필요함).NServiceBus, BizTalk는 이러한 유형의 통신의 예입니다.

+0

자세한 설명을 주셔서 감사합니다. 내가 찾는 것에 아주 가깝다. 서버 푸시보다 폴링을 선호하는 이유를 설명해 주시겠습니까? – Aron

+0

더 많은 생각으로 내 답변을 확장했습니다. 높은 수준에서 나는 편안함과 친숙 함으로 인해 투표를하는 경향이 있습니다. 나는 주로 요청 응답 모델에 빌려주는 웹 애플리케이션에서 작업한다. –

1

WCF 서비스의 호스팅 옵션에 대해 묻는 것처럼 들립니다. 이러한 네 개의 옵션이 있습니다 :

  1. 셀프 호스팅 관리 응용 프로그램에서 - 즉 콘솔 응용 프로그램을 만들 수는, 다음 서비스를 생성하고 (콘솔 응용 프로그램)이 살아있는 동안 살아 유지 다른 WPF 응용 프로그램 등.
  2. 는 Windows 서비스를 관리 - 그것은
  3. 인터넷 정보 서비스 (IIS)를 시작할 때 Windows에서 자동으로 시작 할 수있는 Windows 서비스 생성 -하는 ASP.NET 서비스와 유사
  4. 윈도우 프로세스 활성화 서비스를 호스트 (WAS) - 새로운 정품 인증 서비스, 개인적으로 사용하지 않았습니다.

전체 세부 사항 here.

질문에 완전히 대답하기 위해 ASMX 서비스를 사용하지 않겠습니다. 좋은 이유 목록은 this question을 참조하십시오.

관련 문제