2012-01-20 15 views
1

클라이언트 응용 프로그램은 RIA를 통해 서버에서 프로세스를 시작하지만 구현은 중요하지 않습니다. 내가 프로세스라고 말하면 비즈니스 코드가 실행 중이고 CPU에서 실행중인 실제 프로세스를 나타내지 않는다는 뜻입니다.C#에서 서버 작동 상태를 확인하십시오. 서버 프로세스 상태 확인 (업무 운영)

코드는 C#입니다.

그러면 클라이언트는 프로세스 상태를 확인합니다. 실패, 완료, 계속 실행 중입니다.

기본 사항은 구현하기가 비교적 쉽습니다. 클라이언트가 서버를 정기적으로 폴링하여 프로세스 ID와 관련된 상태를 확인할 프로세스를 확인하기 위해 정적으로 프로세스 ID를 서버에 저장합니다.

주변의 가장자리 케이스는 좀 더 많은 작업이 필요합니다. 코드에서 예외를 처리하지 않고 스레드 (프로세스)를 비정상적으로 중단하고 프로세스와 관련된 상태를 실패로 설정하는 치명적이고 치명적인 이유입니다. 이 시나리오에서 클라이언트는 프로세스가 여전히 진행 중이라고 가정합니다.

나는 스레드 ID를 추적하고 별도의 스레드에서 프로세스를 실행하려고합니다. 클라이언트가 서버를 호출하여 프로세스 상태를 확인하면 프로세스를 실행하는 스레드의 IsAlive 속성을 확인할 수 있습니다.

문제가 될 수있는 시나리오가 있는지 궁금합니다. 어쩌면 IsAlive가 스레드가 매달 리지 만 True를 반환 할 가능성이 있습니다.

또 다른 접근법은 서버에서 프로세스가 주기적으로 클라이언트가 상태를 확인할 때 사용할 수있는 시간 소인을 설정하도록하는 것입니다. 상태를 확인하는 코드는 타임 스탬프가 얼마나 오래되었는지를 볼 수 있으며 우리가 선택한 간격에 따라 (2 분이라고합시다) 프로세스가 계속 실행 중인지 (2 분이 마지막 타임 스탬프가 기록 된 이후로 경과하지 않았는지) 결정할 수 있습니다. 프로세스가 예외없이 시간 초과되었습니다 (스레드가 마지막 시간 소인을 쓴 이후 2 분 이상 경과). 모든 타임 스탬프는 메모리에서 수행됩니다.

이 문제를 해결하는 유용한 방법이 있습니까? 아무도 특별한 접근 방법에 대한 특별한 통찰력이나 조언이 있습니까? 저는 사람들이 가지고있는 다른 시나리오 나 아이디어에 대해서도 열려 있습니까?

+0

또한 일반적으로 코드 단계가 많은 장기 실행 작업임을 유의하십시오. 서버 프로세스를 완료하는 데 1 시간 이상 걸릴 수 있습니다. – user1060500

+0

메시징 시스템 [Keep Alive] (http://en.wikipedia.org/wiki/Keepalive) 용어와 병행하여 각 실행중인 비즈니스 프로세스 (BP)가 실행 상태를 나타내는 KeepAlive 메시지를 전송할 수 있습니다. 높은 네트워크 부하를 피하려면 KA 메시지를 로컬 청취자에게 보내면 통계를 수집 할 수 있습니다. 청취자가 별도의 프로세스 인 경우 shoudl 작업을 제공 한 타임 스탬프가 포함 된 시나리오를 사용할 수 있지만 청취자가 응답 할 때 사례를 처리하는 방법을 고려해야합니다. – sll

답변

0

각 비즈니스 프로세스의 예외를 포함하여 모든 것을 처리하고 모든 상태를 유지 관리하는 완전히 제어 된 서버 앱을 사용하는 것이 더 나은 방법이라고 확신합니다. 클라이언트가 Polling (예를 들어 WCF 이중 채널 사용)보다는 StateChanged 이벤트를 수신하는 경우 더 좋습니다. 당신이하는 일은 기본적으로 1999입니다. .NET은 거의 모든 것을 무료로 제공합니다. 실제로 아키텍처를 올바르게 작성하고 시간을 절약 할 수 있습니다.