많은 네트워크 통신을 수행하는 Windows 서비스를 작성하고 있으며, 사용자에게 (로그온 한 경우) 통보하는 방법이 필요합니다. 예외/오류. 서비스가 데스크톱과 상호 작용할 수 있도록 허용하는 것이 좋지 않으므로 사용자에게 오류가 발생했음을 알리는 다른 방법이 있습니까? 이벤트 로깅에 대해 알고 있지만 시스템 트레이 또는 사용자의 관심을 끄는 알림 풍선을 표시 할 수 있기를 바랍니다..Net Windows 서비스가 사용자에게 오류를보고하는 가장 좋은 방법입니다.
답변
모니터링 전용으로 이벤트 로그와 별도의 응용 프로그램을 사용해보십시오. 전자 메일 또는 MSMQ 사용을 고려할 수도 있습니다.
다른 응용 프로그램을 사용하여이 응용 프로그램과 상호 작용하고 오류에 대해 사용자에게 알리는 것은 어떻습니까? 이렇게하면 사용자에게 "옵션"을 줄 수 있습니다. 알림, 이메일 등을 꺼야 할 수도 있습니다.
일반적으로 서비스에서 알릴 수있는 보조 앱이 있습니다. 예를 들어, 중요한 일이 생겼을 때 풍선을 튀기는 시스템 트레이 아이콘 (Uugh)을 가질 수 있습니다 (double ugh). 앱 자체는 서비스의 설정을위한 인터페이스도 제공 할 수 있습니다.
으르렁 : http://www.growlforwindows.com/gfw/과 같은 기존 알림 앱을 사용할 수 있습니다. 이렇게하면 사용자가 "옵트 인"할 수 있습니다.
"데스크톱과 상호 작용"옵션의 대안을 제공해야합니다. Vista 및 Win7에서는 더 이상 지원되지 않습니다. 고도의 권한을 가진 계정에서 실행되는 UI에 대해 제한된 사용자 액세스 권한을 부여하는 것은 보안 위험이 너무 큰 것으로 간주되었습니다. Google "세션 0 격리"에서 자세한 내용을 확인하십시오.
.NET에서 지원하는 프로세스 interop 메커니즘 중 하나를 사용하여 서비스와 UI 앱 간의 상호 작용을 설정해야합니다. 간단한 메시지 전달의 경우 소켓 또는 명명 된 파이프를 사용하십시오. 파이프 이름에는 모든 세션에서 볼 수있는 "Global \"접두어가 있어야합니다. 보다 복잡한 상호 작용의 경우 Remoting 또는 WCF를 사용할 수 있습니다.
사용자가 데스크톱 앱을 실행하거나 종료하지 않기로 결정했을 가능성을 반드시 고려해야합니다. EventLog 클래스를 사용하여 오류를 기록해야합니다.
이 문제를 해결하기 위해 사용자가 자유롭게 시작하고 중지 할 수있는 Windows Forms 응용 프로그램을 만들었습니다. 물론 Windows 서비스는 연중 무휴로 운영됩니다. 응용 프로그램이 시작되면 WCF (Windows Communication Foundation)를 사용하여 서비스에 현재 상태 (활성 상태인지, 연결된 클라이언트 수, 수집 된 바이트 수 등)를 쿼리합니다.이 정보는 사용자에게 표시됩니다 응용 프로그램 내부.
작업 관리자의 동작을 모방하려고 했으므로 시스템 트레이에 아이콘을 표시하는 응용 프로그램의 기본 폼에 System.Windows.Forms.NotifyIcon
도 추가했습니다. 응용 프로그램이 열리면 시스템 트레이 아이콘이 표시됩니다. 사용자는 작업 표시 줄의 응용 프로그램을 최소화하거나 응용 프로그램을 완전히 숨길 수 있습니다. 트레이 아이콘은 사용자가 응용 프로그램을 닫을 때 사라집니다. 트레이 아이콘은 응용 프로그램을 다시 열 때 두 번 클릭하고 기능에 빠르게 액세스 할 수있는 팝업 메뉴를 지원합니다.
내가 원하는 것은 WCF가 서비스와 프런트 엔드 응용 프로그램을 통신하는 가장 간단한 방법이라는 것입니다. 사람들은 WCF와 관련된 '가파른'학습 곡선에 대해 논쟁 할 것이지만, 나는 그것을 경험하지 못했습니다. WCF는 프로세스 간 의사 소통을 개발하는 데 매우 효율적인 방법이라는 것을 알았습니다. this video을 보면 WCF 프로그래밍 패러다임에 대한 통찰력을 얻을 수 있습니다.