는 TL; DR 버전 :ASP.NET 페이지와 Windows 서비스간에 드문 메시지를 효율적으로 전달하는 방법은 무엇입니까?
승 Windows 서비스에 메시지를 추진하는 aspx 페이지에 대한 쉬운 방법/서비스를 지속적으로 폴링 공유 자원 (예를 들어, 데이터베이스 테이블)에서 있습니까?
는 TL을,하지만이-I는 읽기 - 그것 - 어쨌든 버전 : 나는 매우 긴 실행중인 프로세스를 구현하는 ASP.NET 웹 응용 프로그램을 가지고
합니다. 나는 응용 프로그램 풀 재활용 및 시간 초과 요청으로 인한 부수적 인 문제를 해결하는 일반적인 방법은 IIS 외부에서 장기 실행 프로세스를 처리 할 수있는 Windows 서비스를 만드는 것임을 이해합니다.
저는 ASP.NET에 익숙하며 간단한 Windows 서비스를 작성한 적이 있습니다. 그러나 웹 페이지와 Windows 서비스간에 메시지를 가장 잘 전달하는 방법에 대한 조언을 사용할 수 있습니다.
명백한 쉬운 해결책은 공유 데이터베이스를 사용하는 것입니다. 웹 페이지는 "작업"테이블에 요청을 작성하고 서비스는 해당 테이블을 모니터링하여 작업을 처리 할시기를 알 수 있습니다. 그러나, 그게 내 애플 리케이션이 사용되는 방식에 잘 맞는 지 모르겠다.
이 앱은 기본적으로 홉업 된 이메일 뉴스 레터 우편물입니다 (일반적인 SMTP 편지 병합보다 속도가 느려지는 경우가 있습니다). 평균적으로 며칠에 한 번씩 사용되며 일반적인 사용 사례는 여러 개의 짧은 이메일 작업을 보낸 다음 하나 또는 두 개의 긴 작업을 보내는 것입니다. 따라서 Windows 서비스를 옮기고 자하는 "이메일 전송"코드는 몇 초에서 최대 20 분 (및 성장)까지 실행할 수 있습니다.
규모가 짧은 웹 응용 프로그램의 경우 응답 속도가 느리므로 서비스가 데이터베이스를 몇 초마다 폴링하여 사용자가 작업을 시작하는 데 오래 기다리지 않도록해야합니다. 실행하는 데 걸릴 것입니다. 하지만 앱이 전혀 사용되지 않는 시대의 데이터베이스에는 쓸모없는로드가 많이 발생합니다.
System.Diagnostics.Process를 사용하여 aspx 페이지에서 콘솔 응용 프로그램을 실행하는 예제를 보았습니다. 콘솔 응용 프로그램을 실행하면 내 응용 프로그램이 실제로 어떻게 사용되는지 (콘솔 응용 프로그램에 메일 코드를 넣는 경우) ,하지만 나는 그것을 IIS 프로세스에서 꺼내지 않을 것이라고 생각합니다.
내 질문에 종기가 : 웹 페이지에 대한 메시지를 밀어 (또는 그렇지 않으면 반응을 유발할 수있는) 쉬운 방법은 Windows 서비스 승/공유 서비스를 지속적으로 폴링하는 Windows 서비스 (예 : 데이터베이스 표)? 아니면 내가 생각하는 것보다 적은 수의 폴링 폴링이 문제가 될까요?
세부 정보 : 웹 응용 프로그램은 3.5 프레임 워크를 대상으로하며 이전 백도어 IIS 6 상자에서 실행됩니다. 내 연구에서는 MSMQ에 대한 정보를 WCF/WAS, 심지어 .NET Remoting으로 돌 렸습니다. 그러나이 모든 문제는 과도한 느낌으로이 문제에 대한 충분한 시간을 갖게되었습니다. 무언가를 새 것으로 파싱하고 비교할 수는 없습니다. 셋 (또는 너무 많은 시간을 구글 토끼 구멍에 쏟아 붓는다).
저는 IIS 프로세스에서 일부 코드를 이동시키는 간단한 방법을 찾고 있습니다.
안토니오 감사합니다. WCF 서버를 Windows 서비스로 실행할 수 있다고 말합니까? IIS에 대한 의존성이 있습니까? 내가 WCF/WAS (기술적 인 세부 사항을 파헤치는 중)에 대해 읽은 다른 것들 중 일부는이 프로젝트에서 IIS 6을 사용하는 동안 인생이 훨씬 쉬워 질 것이라고 암시했다. – Matt
예 서버가 Windows 서비스에 있고, WCF ServiceHost가 Windows 서비스 OnStart에서 인스턴스화되고 ASP.NET 응용 프로그램이 클라이언트입니다. 두 응용 프로그램 모두 동일한 서버에 있으므로 명명 된 파이프를 전송으로 사용하고 있습니다. 나는이 세부 사항들로 나의 대답을 업데이트 할 것이다 –
설명과 추가 사항에 감사드립니다. 그 링크의 내용과 관련된 발견 다른 것들과 jibes, 그리고 빠른 프로토 타입을 시작 날을 충분히해야합니다. 일단 내가 끝내면 따라 할게. – Matt