문제

다양한 연속적인 작업을 실행하는 여러 C# Worker 응용 프로그램이 있습니다. 큐에서 이메일 보내기, 웹 사이트 데이터베이스에서 주문 데이터베이스로 새 주문을 가져 오기, 데이터베이스 백업 및 복원, OLTP-> OLAP의 데이터 처리 실행 및 기타 관련 작업을 실행합니다. 전에는 Windows 서비스 로이 제품을 출시했지만 현재는 일반 콘솔 응용 프로그램으로 출시됩니다. 그것들은 모두 내가 만든 일반적인 작업 러너 프레임 워크를 기반으로하며, 이에 만족하지만 이러한 유형의 애플리케이션을 배포하는 가장 좋은 방법은 확실하지 않습니다. 콘솔 버전은 빠르고 쉽기 때문에 프로그램 활동과 출력을 신속하게 볼 수 있습니다. 단점은 작업자 컴퓨터에 여러 콘솔 화면이 실행 중이며 지저분해진다는 것입니다. 반면에 서비스 방법은 배포하는 데 오래 걸리는 것처럼 보이며 메시지를보기 위해 이벤트 로그를 거쳐야합니다. 이것에 대한 경험/의견은 무엇입니까?

도움이 되었습니까?

해결책

콘솔 앱 접근 방식이 마음에 듭니다. 일반적으로 물건을 설정하여 콘솔 화면을 억제하는 -언어와 같은 스위치를 전달할 수 있습니다.

다른 팁

Windows 서비스는 좋은 선택이 될 것입니다. 현재 세션을 닫더라도 백그라운드에서 실행되며 서버에서 패치 업데이트를 수행 할 때 Windows가 다시 시작된 후 자동으로 시작하도록 구성 할 수도 있습니다. 중요한 메시지를 이벤트 뷰어 또는 데이터베이스 테이블에 기록 할 수 있습니다.

이와 같은 일을 위해 표준적인 방법은 Windows 서비스입니다. 로그인 한 사용자가 필요하지 않으므로 서비스가 네트워크 계정에서 실행되기를 원합니다.

나는 몇 년 전에 비슷한 문제가있는 일을했습니다. 논리적으로 나는 서비스가 필요했지만 때로는 무슨 일이 있었는지 볼 필요가 있었고 일반적으로 역사를 원했습니다. 그래서 나는 로그인하고 싶을 때마다 가입자에게 호출 한 서비스를 개발했습니다 (관찰자 패턴으로 구현).

서비스는 자체 데이터 로거 (데이터베이스에 쓰기)를 등록했으며 실행 시간에 사용자는 리모콘을 사용하여 서비스에 연결된 GUI를 실행하여 라이브 리스너가 될 수 있습니다!

나는 Windows 서비스에 투표 할 것입니다. 콘솔 애플리케이션을 관리하는 진정한 고통이 될 것입니다.

Windows 서비스 배포는 쉽습니다. 초기 설치 후에는 끄고 Xcopy를 수행합니다. 복잡한 설치자를 실행할 필요가 없습니다. 그것은 처음으로 반달성 일뿐입니다.

installutil MyApp.exe

Configre 서비스는 도메인에서 실행하도록 서비스를 통해 최고의 보안 및 다른 기계와 가장 쉬운 인터 로프를 위해 계정을 계정합니다.

중요한 알림을 위해 이벤트 로그 (오류, 경고 및 정보 포함)의 조합을 사용하고 텍스트 파일에 장황한 로깅을 덤프하십시오.

모든 세계를 최대한 활용하고 다음과 같은 것을 사용하지 않겠습니까?
http://topshelf-project.com/

프로그램을 명령 줄 또는 Windows 서비스로 실행할 수 있습니다.

이것이 귀하의 애플리케이션에 적용되는지 여부는 확실하지 않지만 사용자 입력에 의존하지 않는 콘솔 애플리케이션이 있거나 작업을 수행하고 종료하는 응용 프로그램이면 가상에서 그러한 프로그램을 실행합니다. 서버,이 방법으로 작동 할 때 화면이 나타나지 않으며 가상 서버를 쉽게 작성하고 다시 시작할 수 있습니다.

우리는 정기적으로 Windows 서비스를 배경 프로세스로 사용합니다. 실행하려면 서버에 로그인해야하므로 명령 줄 앱이 마음에 들지 않습니다. 서비스는 항상 백그라운드에서 실행됩니다 (자동 시작한다고 가정). 또한 Windows에있는 SC.Exe 명령 줄 도구에 설치하는 것이 중요합니다. 나는 installUtil.exe 인 팽창 퇴치보다 더 좋아합니다. 물론 installutil은 더 많은 일을하지만, 그 일이 필요하지 않습니다. 서비스를 등록하고 싶습니다.

또한 인터페이스 정의를 기반으로 .dlls를로드하는 일반 서비스 .Exe가있는 인프라를 만들었으므로 새 "서비스"를 추가하는 것은 새 DLL에 삭제하고 서비스 호스트를 다시 시작하는 것만 큼 간단합니다.

그러나 우리는 서비스에서 멀어지기 시작했습니다. 우리가 그들과 함께하는 문제는 그들이 DLL을 잠그므로 (명백한 이유로) 업그레이드하는 것이 고통 스럽다는 것입니다. 중지, 업그레이드 및 다시 시작해야합니다. 어렵지 않지만 추가 단계. 대신 우리는 필요한 실제 배경 작업을 실행하는 ASP.NET 앱의 특수 "페이지"로 이동합니다. 여전히 서비스가 있지만 ASP.NET 페이지를 호출하여 DLL을 잠그지 않습니다. 그런 다음 ASP.NET BIN 디렉토리의 DLL을 교체 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top